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

2024-07-03 06:19:04 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我在linux上解析-0.000000e+00时有问题(在windows上运行)。在

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

在linux上结构包将-0.000000e+00更改为0.000000e+00。当我打印包装前的值是正确的,但结果结构包好像是0.000000e+00。在

有解决这个问题的办法吗。在

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

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

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

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

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

编辑Sry not error。在


Tags: ltgt编辑linuxwindowsnoterror结构
1条回答
网友
1楼 · 发布于 2024-07-03 06:19:04

结构格式字符串"d"以特定于平台的方式对值进行编码。最有可能的是,解码bytestring的平台具有不同的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<;2.5中,struct被认为是有缺陷的。更新到当前版本,如2.7或3.2。在

相关问题 更多 >