2016-10-23 3 views
1

임의의 16 바이트 문자열을 생성했습니다. 다음과 같이 표시됩니다.파이썬에서 무작위 데이터의 16 바이트를 정수로 변환합니다.

b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\' 

이 값을 (양의 정수)로 변환하고 싶습니다. 파이썬에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

감사합니다.

+0

의도 엔디 언은 무엇입니까? – kindall

+0

아마도 관련 : http://stackoverflow.com/questions/444591/convert-a-string-of-bytes-into-an-int-python – Logan

+0

@Logan 나는 그 게시물을 보았지만, 나는 왜 이해하지 못한다. 구조체를 사용 하시겠습니까? 그것은 해결책이 될 수 없습니다. – aeduG

답변

2

파이썬 3.2 이상에서는 int.from_bytes()를 사용할 수 있습니다

>>> int.from_bytes(b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\', byteorder='little') 
122926391642694380673571917327050487990 

또한 바이트 순서 '큰'사용할 수 있습니다

>>> int.from_bytes(b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\', byteorder='big') 
242210931377951886843917078789492013660 

는 2의 보수 표현을 사용하려는 경우도 지정할 수 있습니다. 더 많은 정보 : 파이썬 2와 파이썬 3 모두 https://docs.python.org/3/library/stdtypes.html

+0

아, 그게 내가 필요한 것 같아. 내 데이터가 무작위 인 경우, 작은 또는 큰 엔디안을 사용하면 문제가되지 않는다고 생각합니다. 숫자를 뒤섞을 것입니다. 맞습니까? – aeduG

+0

정수를 사용하여 정확히 무엇을 할 계획인지에 따라 달라질 것입니다. 그렇지만 바이트 순서를 변경하면 숫자가 달라집니다. – Logan

+0

해당 번호의 원래 문자열로 되돌아가는 명령은 무엇입니까? – aeduG

1

해결책 호환 struct.unpack 사용하는 것입니다

import struct 
n = b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\' 
m = struct.unpack("<QQ", n) 
res = (m[0] << 64) | m[1] 
print(res) 

결과 : 298534947350364316483256053893818307030L

관련 문제