python的struct模块处理二进制数据 pack unpack calcsize pack_into unpack_from方法

2015-09-04 15:53:00
admin
原创 4939
摘要:python的struct模块处理二进制数据 pack unpack calcsize pack_into unpack_from方法

打印字符串十六进制:

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)

    发表评论
    评论通过审核之后才会显示。