Python -0.000000e + 00 struct pack返回错误的值

时间:2012-07-31 08:26:17

标签: data-conversion python-2.4 struct.pack

嗨我在linux上解析-0.000000e + 00有问题(在Windows上工作)。

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

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

有没有解决方案来解决这个问题。

我想我需要添加负数,女巫最接近0.怎么做?

EDIT 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' 我想使用“&lt; d”和“&gt; d”。

编辑Sry没错误。

1 个答案:

答案 0 :(得分:1)

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

>>> 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&lt; 2.5中,结构已知是错误的。更新到当前版本,例如2.7或3.2。