嗨我在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没错误。
答案 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。