2014-11-30 1 views
0

struct.pack을 사용하여 네트워크 주문 2 바이트 문자열에 정수를 가져 오려고합니다.음수와 함께 struct.pack 사용

struct.pack("!H", -9890) 

원인 : 정말 무엇을 의미

error: integer out of range for 'H' format code 

struct.pack("!H", -9890 & 0xff)이다, 즉,이 번호의 마지막 2 바이트를 촬영합니다. struct을 매번 입력을 마스크하지 않고 이런 식으로 행동하게하는 방법이 있습니까?

답변

2

struct은 당신을 위해 마스킹을 할 수 없습니다. 꼭 맞는 정수를 수동으로 제공해야합니다. 0xff으로 마스킹 숫자가 응용 프로그램에서 작동하는 경우 그 작업을 수행해야합니다.

파이썬은 여기에서 추측하지 않습니다. 파이썬 정수는 무제한이며 struct 슬롯의 범위를 벗어나는 정수는 추측 할 일이 아닙니다. 결국 범위 밖에있는 값이 생성되면 응용 프로그램 오류가 발생할 수 있습니다. 그리고 범위를 벗어난 값이 이되어야한다면이 적합 할 것입니다. 그렇게하는 방법은 사용자가 결정해야합니다. 마스킹은 한 가지 방법으로 값을 경계 (0 또는 255)로 제한하는 것이 또 다른 방법입니다.

Zen of Python에서이 개 적용 라인을 인용 : 명시

암시보다 낫다.

[...] 모호함의 얼굴에서

는 추측 유혹을 거부한다.

+0

감사합니다. 내가 게시 한 직후에, 나는 여기에서도 그것을 보았습니다. http://stackoverflow.com/questions/20766813/how-to-convert-signed-to-unsigned-integer-in-python – jaynp

관련 문제