python struct module - 解包时的奇数值

时间:2012-04-19 11:52:34

标签: python struct int

我正在尝试获取b'\ x00 \ x00 \ x00 \ x01'的整数值,这应该是1我假设。

我已经尝试过几件事来获得'1'这个值,但我得到的确非常高。

这就是我的尝试:

import struct
from struct import *

#I had 4 int values:
byte1 = 0
byte2 = 0
byte3 = 0
byte4 = 1

#I packed each to one byte (seems weird, one int to 1 byte - so is this correct?)
byte1 = struct.pack('b', byte1) #returns b'\x00'
byte2 = struct.pack('b', byte2)
byte3 = struct.pack('b', byte3)
byte4 = struct.pack('b', byte4) #returns b'\x01'

#Now i place all those bytes in one container
con = byte1+byte2+byte3+byte4 #returns b'\x00\x00\x00\x01'

#hmm ..returns 4 - so seems alright?
len(con) 

#tried several things:
struct.unpack('I', con) #unsigned int - returns 16777216 (what!?)
struct.unpack('i', con) #signed int - returns the same as above
unpack('I', con) #same ..

我的问题;难道我做错了什么?我理解错了吗? 任何人都可以向我解释为什么它不只是显示'(1,)'?

如果有另一种获得int rep的方法。请让我知道。

感谢您的阅读和回复。

1 个答案:

答案 0 :(得分:4)

您将结果解释为小端,但您应将其解释为大端。尝试

>>> con = b'\x00\x00\x00\x01'
>>> struct.unpack('>i', con)
(1,)

使用正确的endianness