2012-05-18 2 views
1

일부 바이너리 데이터 파일을 읽으려고합니다. 데이터 파일에는 항상 -1 인 "sentinal"정수가 쓰여 있습니다. 데이터를 작성한 머신이 빅 엔디안 (big-endian) 또는 리틀 엔디안 (little-endian)인지 확인하기 위해이 방법을 사용할 수 있다고 생각했지만, 일부 실험에서는 그렇지 않습니다. 구체적 :endianness using struct.pack struct.unpack

import struct 
data=struct.pack('<i',-1) 
print (struct.unpack('<i',data)) #(-1,) 
print (struct.unpack('>i',data)) #(-1,) ??? 

답변

3

-1의 표현, 즉, 크고 리들 엔디안 (및 2의 보수)에서 동일하다 (가정 32 비트) 값 등 0x01020304

ffffffff # big endian 
ffffffff # little endian 

확인하거나 추가 검사를 추가하려면 0x0d0aff00 (0d0a은 Windows EOL CRLF이고, ff은 8 비트 불투명 채널을 깨고, 00은 null로 끝나는 문자열을 손상시킵니다.)

+0

오른쪽 ... 그렇게 생각하지 않았습니다. * 한숨 * 데이터 파일을 만드는 사람들에게 -1을 다른 정수로 바꿀 때가 된 것 같습니다. 감사. – mgilson

3

값 -1은 2 진수 (2의 칭찬)에서 0XFFFFFFFF로 표시됩니다. 그것은 endian-ness에 관계없이 똑같이 보일 것입니다.