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