`

python处理二进制数据,读(解包),写(打包)

 
阅读更多

转自:http://muxu303.blog.163.com/blog/static/51280192011224101232405/

python作为脚本语言中最给力的一种,集成了编译语言的功能性和脚本语言的灵活性,作为一种高级的解释性脚本语言,同时还具有程序语言的各种优点如:面向对象,可扩展,可移植,易学易用,强大的内存管理,有点少叙,本文介绍其对二进制数据的操作模块struct,无论是网络应用,还是文件存储,均可派上用场..

先来感性的认识一段代码:如下(输出为斜体)

 

--------------------------------------------------------------------------------

>>> import struct  【引入struct包】

>>> byte_buf = struct.pack("i5sc6s", 9527,"hello"," ","world!!")  【打包数据到byte_buf中,参数i5sc6s”表示一个int型,长度为5的char组...

>>> v1,v2,v3,v4 = struct.unpack("i5sc6s",byte_buf) 【解包到四个值】

>>> print v1,v2,v3,v4 【打印输出】

9527 hello   world!                                                              【最后一个感叹号没打印出来,因为格式化参数“i5sc6s“的6截断第二个感叹号

--------------------------------------------------------------------------------

 

 

>>> byte_buf = struct.pack("i", 134)    【只对一个值打包】

>>> type(struct.unpack("i", byte_buf))                                    【unpack返回的是tuple

 

<type 'tuple'>

>>> struct.unpack("i", byte_buf)[0]     

134

通过如上的演示,相信大家对该模块的用法已经掌握了,如下两表为该模块对应的,格式化时使用的数据类型,和一些特殊规则

 

 

Format C Type Python 字节数
x pad byte no value 1
c char string of length 1 1
b signed char integer 1
B unsigned char integer 1
? _Bool bool 1
h short integer 2
H unsigned short integer 2
i int integer 4
I unsigned int integer or long 4
l long integer 4
L unsigned long long 4
q long long long 8
Q unsigned long long long 8
f float float 4
d double float 8
s char[] string 1
p char[] string 1
P void * long 4

 

考虑到c或c++编译器使用了字节对齐,通常是以4个字节为单位的32位系统,故而还提供了如下的选项用来表示不同的字节对其方式,如使用'@6si'表示4字节对齐,先6个char,再一个int型,共使用12个字节

 

Character Byte order Size and alignment
@ native native            4个字节对齐
= native standard        原字节数
< little-endian standard        原字节数
> big-endian standard       原字节数
! network (= big-endian) standard       原字节数

分享到:
评论

相关推荐

    Python-Smartyparsepython面向对象的动态二进制打包和解包

    Smartyparse: python面向对象的动态二进制打包和解包-SmartyParse 是面向 3.3 以上 Python 的二进制 打包/解包(又名建筑/解析)格式库. 如果需要定义二进制格式 (.tar, .bmp, 字节式网络数据包..) 或是开发专用格式...

    Python中的`struct`模块如何用于数据打包和解包

    在Python中,struct模块是用于处理二进制数据的强大工具,它允许你将复杂的数据结构打包成二进制字符串,并在需要时将这些二进制字符串解包回原始数据。这对于与C语言程序交互或进行网络通信尤其有用。以下是如何在...

    Python3.7.2中文文档-标准库-Python二进制数据服务

    Python 3.7.2 的中文文档包含了对官方标准库的详尽解释,特别是“Python二进制数据服务”这一部分,它涵盖了处理不同类型二进制数据的核心模块。这些模块对于进行系统级编程、网络通信、文件操作以及数据存储至关...

    python处理二进制数据的方法

    - **`struct.unpack()`**:用于从二进制格式解包出Python类型的数据。 #### 4. 具体操作技巧 1. **读取二进制文件**: - 使用`open()`函数并指定模式`'rb'`。 - 使用`read()`或`readline()`方法来读取数据。 2....

    python读写二进制文件的方法

    这个模块提供了打包和解包原始二进制数据的功能。 ```python import struct myfile = open('c:\\t', 'rb').read(1) print(struct.unpack('c', myfile)) print(struct.unpack('b', myfile)) ``` 这里使用`struct....

    读取写入二进制数据

    `struct`模块提供了打包和解包功能,允许我们按照特定格式处理字节数据。例如,如果我们有一个整型(int)和一个浮点型(float)数据,可以这样操作: ```python import struct # 写入数据 data = struct.pack('if', ...

    extract-string.rar_二进制数据

    例如,Python的`struct`模块可以用来打包和解包二进制数据,C++的`std::ifstream`可以读取二进制文件,Java的`DataInputStream`和`BufferedInputStream`类可用于处理二进制输入流。 7. **安全性和错误处理**:处理...

    python读取二进制mnist实例详解

    读取MNIST二进制文件的关键在于使用Python的内置`struct`模块,它可以处理不同字节序的数据解包和打包。在Python代码中: ```python import struct import numpy as np import matplotlib.pyplot as plt # 打开...

    使用Python进行二进制文件读写的简单方法(推荐)

    在Python中,处理二进制文件的关键在于理解如何有效地读取和写入非文本数据。Python的标准库提供了`struct`模块,它允许开发者将基本数据类型转换为字节序列,反之亦然,这对于处理二进制文件至关重要。下面我们将...

    Python二进制文件读取并转换为浮点数详解

    ### Python二进制文件读取并转换为浮点数详解 在进行数据分析或科学计算时,经常需要处理存储为二进制格式的数据文件。这些文件通常由其他程序生成,如科学仪器、模拟软件等,并且因为其紧凑性而被广泛采用。在...

    Python如何读写二进制数组数据

    在处理二进制数组数据时,`struct`模块允许我们以结构化的方式打包和解包数据,例如将元组转换为二进制格式,然后再从二进制数据中恢复元组。 首先,我们要定义一个结构体(Struct)来指定数据的格式。在Python中,...

    带汉字的二进制文件存储

    例如,在Python中,可以使用`codecs`库进行编码和解码,`struct`库进行二进制数据的打包和解包。在C++中,可以利用`std::ofstream`和`std::ifstream`进行文件读写,并结合`std::wstring_convert`和`std::codecvt_utf...

    Python+OpenCV实现将图像转换为二进制格式

    文章中提到了使用struct模块来处理数据的二进制打包与解包。struct模块提供了打包和解包Python值与C结构体类型值之间相互转换的功能。在写入二进制文件时,可以使用struct模块将每个像素的颜色值打包为二进制数据;...

    Python学习手册(第4版)-第8部分&附录

    比如,使用struct模块来处理图形或音频文件,或者进行二进制数据的打包和解包时,必须理解bytes类型和如何正确地处理这些数据。 即使有些程序员的工作不涉及非ASCII文本或二进制数据,了解Python 3.0的字符串模式...

    搜狗词库解码python脚本

    `struct`模块提供了打包和解包二进制数据的方法,根据特定的格式(如'lhH',分别代表一个long型整数和两个short型整数)将字节流转换为Python数据类型。 在解码过程中,我们还需要理解词库的组织结构。例如,词库...

    python二进制文件的转译详解

    在Python编程中,处理二进制文件是一项重要的任务,特别是在数据存储、文件读写和通信协议等领域。Python的`struct`模块为此提供了强大的支持。本文将深入探讨如何使用`struct`进行二进制文件的转译,以及相关的重要...

    Python使用struct处理二进制(pack和unpack用法)

    在Python编程中,有时我们需要处理二进制数据,特别是在涉及文件操作、网络通信(如socket)等场景。这时,Python的`struct`模块提供了一种有效的方法来处理这些数据,尤其是与C语言中的结构体类似的数据。`struct`...

    基于python的GNSS rtcm解码算法源码

    这可能涉及到Python的二进制操作,如位移、掩码等,以及struct模块用于处理二进制数据的打包和解包。 4. **GNSS知识**:理解RTCM报文结构,包括各种类型的报文(如差分改正信息、卫星钟模型等),以及它们在GNSS...

    醉八仙解包打包工具源码

    《醉八仙解包打包工具源码》是一个专注于游戏资源处理的软件开发项目,主要功能是针对特定游戏“醉八仙”进行数据包的解包和打包操作。这个工具的源码提供了对游戏数据包进行读取、修改和重新打包的能力,对于游戏...

    payload-dumper-解包

    总的来说,“payload-dumper-解包”是一个关于二进制文件解析和数据提取的实践,涉及了编程语言(Python)、数据序列化协议(protobuf)、版本控制(Git)以及可能的系统级知识,如固件更新和图像文件格式。...

Global site tag (gtag.js) - Google Analytics