【问题标题】:Python struct.error: integer out of range for 'q' format codePython struct.error:“q”格式代码的整数超出范围
【发布时间】:2017-12-11 23:00:21
【问题描述】:

我遇到了问题,我想将二进制数转换为双精度数。

经过一些搜索,我找到了一些方法,但我仍然遇到问题,我可以投射“小”数字但不能投射大数字(双精度),这是我的示例代码:

print unpack( "d", pack( "q", 4631069437225598976 ) )[ 0 ]
print unpack( "d", pack( "q", 13829563286724542464 ) )[ 0 ]

第一个没有问题,但下一个崩溃了,描述错误。

第一个数字应该是:41.7274732 第二个应该是:-0.8899581

有什么想法吗?

非常感谢

【问题讨论】:

  • 我已经找到了一种解决方案(不确定是否是最好的): print unpack( ">d", binascii.unhexlify( "BFEC7A8980000000" ) )[0]

标签: python struct casting double


【解决方案1】:

使用 Q 表示 unsigned long long,而不是 q 表示 long long,将给出您想要的输出:

from struct import pack, unpack

print unpack( "d", pack( "Q", 4631069437225598976 ) )[ 0 ]
print unpack( "d", pack( "Q", 13829563286724542464 ) )[ 0 ]

输出:

41.7274742126
-0.889958143234

编辑:

请仔细检查您的其他大数字,因为它可能会给出相同的错误,我们只是在最重要的位位置添加一位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多