python的struct模块处理二进制数据
- 2015-09-04 15:53:00
- admin
- 原创 5434
一、python的struct模块处理二进制数据
对齐字符说明:
1、格式第一个字符指定字节序、大小、对齐策略;
2、第一个字符不是以下任一字符,默认为@字符;
3、native表示当前机器的大端小端;
数据字符说明:
1、数据字符前面加数字表示重复,比如'4i' = 'iiii';
2、表达式中的空白字符被忽略,但数字和数据字符之间不能有空白;
打印字符串十六进制:
def printHex(s):
for ch in s:
print '0x%02x' % ord(ch),
print
pack转换为二进制数据:
1、计算数据长度,print struct.calcsize('ii'),输出8
2、转换整数,printHex(struct.pack('i', 1)),输出0x01 0x00 0x00 0x00
3、补齐,printHex(struct.pack('ixx', 1)),输出0x01 0x00 0x00 0x00 0x00 0x00
4、对齐,printHex(struct.pack('ic', 1, 'a')),输出0x01 0x00 0x00 0x00 0x61
5、对齐,printHex(struct.pack('ci', 'a', 1)),输出0x61 0x00 0x00 0x00 0x01 0x00 0x00 0x00
unpack解析二进制数据:
1、print struct.unpack('i', struct.pack('i', 1)),输出(1,)
2、print struct.unpack('ci', struct.pack('ci', 'a', 1)),输出('a', 1)
3、print struct.unpack('3s', struct.pack('3s', 'abc')),输出('abc',)
使用缓存转换数据:
buf = ctypes.create_string_buffer(100)
struct.pack_into('i', buf, 1, 5)
print struct.unpack_from('i', buf, 1)