1

我正在尝试读取一些二进制数据文件。数据文件中写入了一个“sentinal”整数,始终为 -1。我以为我可以用它来检查写入数据的机器是大端还是小端,但经过一些实验,情况似乎并非如此。具体来说:

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

2 回答 2

4

-1 的表示在 big 和 liddle 字节序(和二进制补码)中是相同的,即(假设为 32 位)

ffffffff # big endian
ffffffff # little endian

使用诸如 的值进行检查0x01020304,或者,如果您想添加额外的检查,0x0d0aff000d0a是 Windows EOL CRLFff将打破 8 位不透明通道,00并将打破以空值结尾的字符串)。

于 2012-05-18T13:23:13.247 回答
3

值 -1 表示为二进制的 0XFFFFFFFF(二进制补码)。无论字节序如何,它看起来都一样。

于 2012-05-18T13:23:16.493 回答