2012-05-18 73 views
1

我想讀取一些二進制數據文件。數據文件有一個寫在它們中的「下面的」整數,它總是-1。我想我可以用它來檢查寫數據的機器是大端還是小端,但經過一些實驗,看起來情況並非如此。具體做法是: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的表示是在大和利德爾端(和二的補碼)的相同,即(假定32位)

ffffffff # big endian 
ffffffff # little endian 

檢查與諸如0x01020304的值,或,如果你想添加額外的支票,0x0d0aff000d0a是Windows EOL CRLF,ff將突破8位不透明通道,並且00將打破空終止的字符串)。

+0

對......沒有想到這一點。 *感嘆*我想是時候請求創建數據文件的人將-1改爲其他整數。謝謝。 – mgilson

3

值-1在二進制中表示爲0XFFFFFFFF(2的恭維)。不管碼頭是什麼,它看起來都是一樣的。