转自: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 原字节数 |
分享到:
相关推荐
Smartyparse: python面向对象的动态二进制打包和解包-SmartyParse 是面向 3.3 以上 Python 的二进制 打包/解包(又名建筑/解析)格式库. 如果需要定义二进制格式 (.tar, .bmp, 字节式网络数据包..) 或是开发专用格式...
在Python中,struct模块是用于处理二进制数据的强大工具,它允许你将复杂的数据结构打包成二进制字符串,并在需要时将这些二进制字符串解包回原始数据。这对于与C语言程序交互或进行网络通信尤其有用。以下是如何在...
Python 3.7.2 的中文文档包含了对官方标准库的详尽解释,特别是“Python二进制数据服务”这一部分,它涵盖了处理不同类型二进制数据的核心模块。这些模块对于进行系统级编程、网络通信、文件操作以及数据存储至关...
- **`struct.unpack()`**:用于从二进制格式解包出Python类型的数据。 #### 4. 具体操作技巧 1. **读取二进制文件**: - 使用`open()`函数并指定模式`'rb'`。 - 使用`read()`或`readline()`方法来读取数据。 2....
这个模块提供了打包和解包原始二进制数据的功能。 ```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', ...
例如,Python的`struct`模块可以用来打包和解包二进制数据,C++的`std::ifstream`可以读取二进制文件,Java的`DataInputStream`和`BufferedInputStream`类可用于处理二进制输入流。 7. **安全性和错误处理**:处理...
读取MNIST二进制文件的关键在于使用Python的内置`struct`模块,它可以处理不同字节序的数据解包和打包。在Python代码中: ```python import struct import numpy as np import matplotlib.pyplot as plt # 打开...
在Python中,处理二进制文件的关键在于理解如何有效地读取和写入非文本数据。Python的标准库提供了`struct`模块,它允许开发者将基本数据类型转换为字节序列,反之亦然,这对于处理二进制文件至关重要。下面我们将...
### Python二进制文件读取并转换为浮点数详解 在进行数据分析或科学计算时,经常需要处理存储为二进制格式的数据文件。这些文件通常由其他程序生成,如科学仪器、模拟软件等,并且因为其紧凑性而被广泛采用。在...
在处理二进制数组数据时,`struct`模块允许我们以结构化的方式打包和解包数据,例如将元组转换为二进制格式,然后再从二进制数据中恢复元组。 首先,我们要定义一个结构体(Struct)来指定数据的格式。在Python中,...
例如,在Python中,可以使用`codecs`库进行编码和解码,`struct`库进行二进制数据的打包和解包。在C++中,可以利用`std::ofstream`和`std::ifstream`进行文件读写,并结合`std::wstring_convert`和`std::codecvt_utf...
文章中提到了使用struct模块来处理数据的二进制打包与解包。struct模块提供了打包和解包Python值与C结构体类型值之间相互转换的功能。在写入二进制文件时,可以使用struct模块将每个像素的颜色值打包为二进制数据;...
比如,使用struct模块来处理图形或音频文件,或者进行二进制数据的打包和解包时,必须理解bytes类型和如何正确地处理这些数据。 即使有些程序员的工作不涉及非ASCII文本或二进制数据,了解Python 3.0的字符串模式...
`struct`模块提供了打包和解包二进制数据的方法,根据特定的格式(如'lhH',分别代表一个long型整数和两个short型整数)将字节流转换为Python数据类型。 在解码过程中,我们还需要理解词库的组织结构。例如,词库...
在Python编程中,处理二进制文件是一项重要的任务,特别是在数据存储、文件读写和通信协议等领域。Python的`struct`模块为此提供了强大的支持。本文将深入探讨如何使用`struct`进行二进制文件的转译,以及相关的重要...
在Python编程中,有时我们需要处理二进制数据,特别是在涉及文件操作、网络通信(如socket)等场景。这时,Python的`struct`模块提供了一种有效的方法来处理这些数据,尤其是与C语言中的结构体类似的数据。`struct`...
这可能涉及到Python的二进制操作,如位移、掩码等,以及struct模块用于处理二进制数据的打包和解包。 4. **GNSS知识**:理解RTCM报文结构,包括各种类型的报文(如差分改正信息、卫星钟模型等),以及它们在GNSS...
《醉八仙解包打包工具源码》是一个专注于游戏资源处理的软件开发项目,主要功能是针对特定游戏“醉八仙”进行数据包的解包和打包操作。这个工具的源码提供了对游戏数据包进行读取、修改和重新打包的能力,对于游戏...
总的来说,“payload-dumper-解包”是一个关于二进制文件解析和数据提取的实践,涉及了编程语言(Python)、数据序列化协议(protobuf)、版本控制(Git)以及可能的系统级知识,如固件更新和图像文件格式。...