在Python中将二进制表示转换为带符号的64位整数

时间:2017-02-22 16:59:40

标签: python bit-manipulation

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

我有64位二进制表示

1000010101010111010101010101010101010101010101010111010101010101

,当表示为有符号整数时,应为负数。但是,Python默认键入long,阻止数字被第一位签名,产生数字9608242155010487637

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

澄清一下,我正在使用Python 2.7。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

尝试bitstring模块:

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