3 바이트를 정수로 읽으려면 어떻게해야합니까?3 바이트를 정수로 읽음
구조 모듈에서 이와 비슷한 기능을 제공합니까?
3 바이트로 읽고 \ x00을 추가 한 다음 4 바이트 정수로 해석 할 수 있지만 불필요한 것으로 보입니다.
3 바이트를 정수로 읽으려면 어떻게해야합니까?3 바이트를 정수로 읽음
구조 모듈에서 이와 비슷한 기능을 제공합니까?
3 바이트로 읽고 \ x00을 추가 한 다음 4 바이트 정수로 해석 할 수 있지만 불필요한 것으로 보입니다.
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,)
을 NUL을 추가 확인을 + 1 구조체 ... – chespinoza
내가 3.2에서 int
새로운 방법 .from_bytes
을 개발 생각, 그래서 당신은 다음과 같은 대신 struct.unpack
사용할 수있어 : 참고로
int.from_bytes(b'\x00\x00\x01', 'big')
# 1
를 참조하십시오 http://docs.python.org/dev/library/stdtypes.html#int.from_bytes
파이썬 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
당신이 ... 오른쪽 끝으로 –