【问题标题】:Converting binary representation to signed 64 bit integer in Python在 Python 中将二进制表示形式转换为有符号的 64 位整数
【发布时间】:2017-02-23 01:21:53
【问题描述】:

根据在线资源的建议,我正在使用 Python 在我的一个脚本中进行一些简单的位移。位移很好,它代表了困难的结果。让我解释一下。

我有一个 64 位二进制表示

1000010101010111010101010101010101010101010101010111010101010101

当表示为有符号整数时,它应该是负数。然而,Python 默认输入long,防止数字被第一位签名,产生数字9608242155010487637

如何让 Python 识别 64 位的符号位?

为了澄清,我使用的是 Python 2.7。

【问题讨论】:

标签: python bit-manipulation


【解决方案1】:

试试bitstring 模块:

>>> from bitstring import BitArray
>>> s = '1000010101010111010101010101010101010101010101010111010101010101'
>>> BitArray(bin=s).int
-8838501918699063979

【讨论】:

    【解决方案2】:

    你可以使用struct,像这样:

    >>> import struct
    >>> struct.unpack('l',struct.pack('P',
    int('1000010101010111010101010101010101010101010101010111010101010101',
    2)))
    #=> (-8838501918699063979,)
    

    结果是一个元组,然后你可以请求它的第一个元素:

    >>> struct.unpack('l',struct.pack('P',
    int('1000010101010111010101010101010101010101010101010111010101010101',
    2)))[0]
    #=> -8838501918699063979
    

    【讨论】:

    • 我收到一个结构错误struct.error: unpack requires a string argument of length 4
    • 我将 l 参数更改为 q 以表示 64 位有符号长整数,这修复了此错误并给了我正确的结果。
    猜你喜欢
    • 2015-11-30
    • 2015-12-28
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多