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

标签 python 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。当我在 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/

相关文章:

python - DefaultDict 的替代品

python - 使用 python 2.4 计算 CSV 文件中的列数

python - 将标准输出从 subprocess.Popen 保存到文件,并将更多内容写入文件

python - QSortFilterProxyModel 获取过滤后的数据

android - Kivy 中的 HTTPS 请求

arm - 将 24 位二进制补码转换为 float_32t

string - 使用 Fortran 读取整数列表文件

Python:使用索引数组在两个数组之间进行映射

python - 如何链接不同Python文件中的类(多框架)?将不同页面链接回 MenuPage?

python:以 block 的形式读取 csv 时,将 pandas 分类值转换为整数