1

嗨,我在 linux 上解析 -0.000000e+00 时遇到问题(在 windows 上工作)。

struct.pack( "d", -0.000000e+00 )

在 linux struct.pack 上,将 -0.000000e+00 更改为 0.000000e+00。当我在pack之前打印值是正确的但struct.pack的结果就像是0.000000e + 00。

有没有办法解决这个问题。

我想我需要添加最接近 0 的负数。怎么做?

编辑 struct.pack( "d", -0.000000e+00 )结果'\x00\x00\x00\x00\x00\x00\x00\x80'

struct.pack( "!d", -0.000000e+00 )结果'\x00\x00\x00\x00\x00\x00\x00\x00'

struct.pack( "<d", -0.000000e+00 )结果'\x00\x00\x00\x00\x00\x00\x00\x00'

struct.pack( ">d", -0.000000e+00 )结果 '\x00\x00\x00\x00\x00\x00\x00\x00' 我想使用“< d”和“> d”。

编辑 Sry 没有错误。

4

1 回答 1

1

struct 格式字符串"d"以特定于平台的方式对值进行编码。最有可能的是,您解码字节串的平台具有不同的字节序或双精度数。使用!格式字符强制平台无关的编码:

>>> struct.pack('!d', -0.)
b'\x80\x00\x00\x00\x00\x00\x00\x00' # IEEE754 binary64 Big Endian
>>> struct.unpack('!d', b'\x80\x00\x00\x00\x00\x00\x00\x00')[0]
-0.0

还要确保您使用受支持的 Python 版本。在 cPython<2.5 中,已知 struct 有问题。更新到当前版本,例如 2.7 或 3.2。

于 2012-07-31T08:41:40.397 回答