Python 以整数形式读取3个字节

Python 以整数形式读取3个字节,python,Python,如何读取3个字节作为整数 struct模块是否提供类似的功能 我可以读入3个字节并添加一个额外的\x00,然后将其解释为4字节整数,但这似乎是不必要的。结构模块没有3字节整数的选项,因此我认为您添加“\x00”的想法是最简单的方法 In [30]: import struct In [38]: struct.pack('>3b',0,0,1) Out[38]: '\x00\x00\x01' In [39]: struct.unpack('>i','\x00'+'\x00\x00\x

如何读取3个字节作为整数

struct模块是否提供类似的功能


我可以读入3个字节并添加一个额外的\x00,然后将其解释为4字节整数,但这似乎是不必要的。

结构模块没有3字节整数的选项,因此我认为您添加“\x00”的想法是最简单的方法

In [30]: import struct
In [38]: struct.pack('>3b',0,0,1)
Out[38]: '\x00\x00\x01'

In [39]: struct.unpack('>i','\x00'+'\x00\x00\x01')
Out[39]: (1,)

我认为从3.2开始,
int
开发了一种新的方法
。从_bytes
,因此您可以使用以下方法代替
struct.unpack

int.from_bytes(b'\x00\x00\x01', 'big')  
# 1

如需参考,请参阅:

Python2的另一个替代方案是不使用
struct
模块:

>>> s = '\x61\x62\xff'
>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s))[::-1])])
>>> print a
6382335
>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s)))])
>>> print a
16736865
>>> print struct.unpack('<I', s + '\x00')[0]
16736865
其中字节顺序是big-endian。这将产生与使用相同的结果 答复:

对于小端字节顺序,转换为:

>>> s = '\x61\x62\xff'
>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s))[::-1])])
>>> print a
6382335
>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s)))])
>>> print a
16736865
>>> print struct.unpack('<I', s + '\x00')[0]
16736865
>a=sum([ord(b)*2**(8*n)表示邮政编码(s,range(len)))]
>>>打印
16736865

>>>print struct.unpack(“另一个选项是自己进行位移位

大端语:

ba = # 3 byte bytearray
v = ba[0] << 16 | ba[1] << 8 | ba[2]
ba=#3字节字节字节数组

v=ba[0]确保将NUL添加到右端。。。