2012-04-18 23 views
8

如何以整數形式讀取3個字節?以整數形式讀取3個字節

結構模塊是否提供類似的東西?

我可以讀取3個字節並添加一個額外的\ x00,然後將其解釋爲一個4字節的整數,但似乎沒有必要。

+4

確保您添加到NUL右端... – 2012-04-18 19:44:11

回答

11

結構模塊沒有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,) 
+1

+ 1爲結構... – chespinoza 2013-05-28 19:28:40

2

的蟒蛇2和沒有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 

其中字節排序是big-endian。這給了相同的結果與 unutbu答案:

>>> print struct.unpack('>I', '\x00' + s)[0] 
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 
相關問題