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

3

尽管在线资源不建议这样做,但我仍在我的脚本中使用Python进行一些简单的位移操作。位移本身没有问题,但是表示结果却很困难。让我来解释一下。

我有一个64位二进制表示:

1000010101010111010101010101010101010101010101010111010101010101

当表示为带符号整数时,应该是负数。但是,由于Python默认为long类型,第一位无法表示符号,导致得到了数字9608242155010487637

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

需要说明的是,我正在使用Python 2.7。


你可以在这里找到答案: https://dev59.com/e1XTa4cB1Zd3GeqPzjcC http://stackoverflow.com/questions/27016919/how-to-decode-base64-file-into-binary-in-python - Loïc Poncin
@LoïcPoncin,很高兴你在寻找重复的目标,但是这两个问题都与此问题不太相关。 - PM 2Ring
2个回答

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 - DonutGaz
我将l参数更改为q,以表示64位有符号长整型,这修复了错误并给出了正确的结果。 - DonutGaz

2

尝试使用bitstring模块:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接