我如何知道在struct.unpack()中将十六进制字符串转换为浮点数时使用哪个端序?



我有十六进制字符串形式的数据,我将其转换为float:

import struct, binascii
a = '0X437A1AF6'
x = struct.unpack('>f', binascii.unhexlify(str(a)[2:]))
print(x[0])

我得到了正确的结果,但我如何证明使用大端序'>f'是正确的选择,或者我如何确定一般使用什么端序?试错是一种选择,但还有其他选择吗?

Endianness是对象中字节的排序方式。我知道你在代码中使用了浮点数,但为了简单起见,我在这里使用整数。

大端序表示字节从大到小的顺序:内存中的437a1af6表示43 7a 1a f61132075766

小端序表示字节顺序从小到大:内存中的437a1af6表示f6 1a 7a 43-166036925(有符号时),或4128930371(无符号时)。

浮点也有特定的字节顺序,见这里。端序会影响浮点数表示的字节顺序,并且会极大地改变返回的值。


只要保持一致,使用哪个端序并不重要,但在当前的x86实现中,小端序更常用。选择没有对错之分。

在你的例子中,小端序解包到-7.832944125711889e+32,大端序解包到250.10531616210938

相关内容

  • 没有找到相关文章