用Python打包数据

时间:2014-11-02 13:00:58

标签: python struct binary endianness

我正在尝试在python中使用Struct来打包一些数据,但遇到一些奇怪的行为:

我的格式是:

struct.Struct('B B I 15s I')

输出为(为清晰起见而添加了管道):

ff|01|000022000000|4650766e65564369797a4531416f41|0001000000

前两个条目是完美的,中间的字符串也是如此。但是我传递的整数值分别是34和1,并且期望00000022,00000001而不是我得到的奇怪的6字节数据......

1 个答案:

答案 0 :(得分:1)

有两个问题在起作用:字节序和填充。例如,00002200000000是两个字节的零填充,后面是小端编码的0x22

00 00 22 00 00 00
^^^^^             padding
      ^^^^^^^^^^^ 0x22

要解决这两个问题,请明确指定所需的字节序:

struct.Struct('> B B I 15s I')

(除去填充的原因是struct仅在使用默认本机编码时填充结构。)

相关问题