2013-12-16 6 views
2

바이트 배열에 struct.unpack을 사용하는 응용 프로그램을 작성했습니다. 그것이 잘 작동 파이썬 2.7.5를 사용하여 내 컴퓨터에 실행 :bytearray의 struct.unpack

error: unpack requires a string argument of length 8

내가 필요 :

>>> data 
bytearray(b'\x07\x00\x00\x00\x00\x00\x00\x00') 
>>> struct.unpack("<Q", data) 
(7,) 

을하지만, 나는 예외를 가지고 파이썬 버전 2.7.3와 함께 사용하려 bytearray를 풀기 전에 명시 적으로 문자열로 변환하십시오. 이것은 파이썬 버전 변경과 관련이 있습니까? struct manual은 이것에 관해서 아무 말도하지 않고 있습니다. 나는 모든 캐스팅을 피하고 싶습니다. 주위에 어떤 방법이 있습니까?

답변

3

눈치 챘을 때, 이것은 파이썬 버전과 관련이 있습니다. 외관상으로는 struct.unpack는 버전 2.7.3 후에 고치거나 확장되었다.

스크립트가 2.7.5 및 2.7.3 버전 모두에서 작동해야하고 두 버전에서 실행되도록하는 방법을 찾은 경우 (문자열에 캐스팅하여) 다음과 같이 해결 코드를 호출 할 수 있습니다. struct.unpack을 함수에 추가하고 수행해야하는 경우 언제든지 struct.unpack의 캐스팅과 호출을 수행하는 대신이 함수를 호출하십시오. 이렇게하면 코드가 우아하고 짧게 유지됩니다. DRY.

3

또한, 바이트 된 ByteArray 객체를 래핑 할 수 있습니다 : 그것은 너무 Python3에서 작동

>>> data 
bytearray(b'\x07\x00\x00\x00\x00\x00\x00\x00') 
>>> struct.unpack("<Q", bytes(data)) 
(7,) 

.

관련 문제