2012-04-18 37 views
8

Làm cách nào để đọc 3 byte dưới dạng số nguyên?Đọc 3 byte dưới dạng số nguyên

Mô-đun cấu trúc có cung cấp những thứ tương tự không?

Tôi có thể đọc trong 3 byte và thêm một \ x00 phụ và sau đó diễn giải nó dưới dạng số nguyên 4 byte, nhưng điều đó có vẻ không cần thiết.

+4

Hãy chắc chắn rằng bạn thêm NUL đến hết ngay ... –

Trả lời

11

Mô-đun cấu trúc không có tùy chọn cho số nguyên 3 byte, vì vậy tôi nghĩ ý tưởng của bạn về việc thêm '\ x00' là cách dễ nhất.

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 cho struct ... – chespinoza

2

Một thay thế cho python 2 và không có mô-đun struct sẽ là:

>>> s = '\x61\x62\xff' 
>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s))[::-1])]) 
>>> print a 
6382335 

nơi đặt hàng byte là kết thúc lớn. Điều này sẽ cho kết quả tương tự như với unutbu câu trả lời:

>>> print struct.unpack('>I', '\x00' + s)[0] 
6382335 

Đối với byte ít về cuối nhỏ ra lệnh chuyển đổi sẽ là:

>>> 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 
Các vấn đề liên quan