2012-04-18 6 views
8

3 바이트를 정수로 읽으려면 어떻게해야합니까?3 바이트를 정수로 읽음

구조 모듈에서 이와 비슷한 기능을 제공합니까?

3 바이트로 읽고 \ x00을 추가 한 다음 4 바이트 정수로 해석 할 수 있지만 불필요한 것으로 보입니다.

+4

당신이 ... 오른쪽 끝으로 –

답변

11

struct 모듈에는 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

을 NUL을 추가 확인을 + 1 구조체 ... – chespinoza

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 

바이트 순서는 빅 엔디안입니다. 것 변환을 주문 little endian의 바이트

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

:이 unutbu 대답과 같은 결과를 제공

>>> 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 
관련 문제