1
casparchen 2014-12-20 13:35:24 +08:00
是我眼睛看花了吗, 你pack的结果跟unpack时用的不一致
|
2
savebox 2014-12-20 13:40:03 +08:00
bigendian和little endian的问题
你os是win 例子里面就不一定是win哦 |
3
sbmzhcn OP @casparchen 是不一样,你没看到上面的代码有问题吗, 1 pack的结果应该是 \x00\x01 但实际却是\x01\x00,
原文档: unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03') 结果是(1, 2, 3) 我的unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03') 结果是(256, 512, 50331648) |
4
sbmzhcn OP @savebox 怎么解决,我现在需要 pack('h', 16) 的结果是 \x00\x10 但它的结果总是 \x10\x00
|
5
glasslion 2014-12-20 13:45:54 +08:00
http://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F
By default, C types are represented in the machine’s native format and byte order, and properly aligned by skipping pad bytes if necessary (according to the rules used by the C compiler). pack('>hhl', 1, 2, 3) Out[8]: '\x00\x01\x00\x02\x00\x00\x00\x03' pack('<hhl', 1, 2, 3) Out[9]: '\x01\x00\x02\x00\x03\x00\x00\x00' unpack('>hhl', '\x00\x01\x00\x02\x00\x00\x00\x03') Out[10]: (1, 2, 3) unpack('<hhl', '\x01\x00\x02\x00\x03\x00\x00\x00') Out[11]: (1, 2, 3) |
6
savebox 2014-12-20 13:47:52 +08:00 1
>>> unpack('<hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(256, 512, 50331648) >>> unpack('>hhl', '\x00\x01\x00\x02\x00\x00\x00\x03') (1, 2, 3) 我都是强制加上>或<, 看手册,>是big.<是little, 不加就是系统默认的endian格式,pack同样 |