嗨,我在 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”。
编辑抱歉,不是错误。
最佳答案
结构格式字符串“d”
以特定于平台的方式对值进行编码。最有可能的是,您解码字节串的平台具有不同的 endianess或 double 的长度。使用 !
格式字符强制进行与平台无关的编码:
>>> 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。
关于Python -0.000000e+00 struct pack返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11736003/