2017-02-22 125 views
2

针对在线资源的建议,我使用Python在我的一个脚本中做了一些简单的位移。位移很好,它代表的结果很难。让我解释。在Python中将二进制表示转换为带符号的64位整数

我有一个64位二进制表示

1000010101010111010101010101010101010101010101010111010101010101

,当作为带符号的整数表示的,应该是负的。但是,Python默认输入long,防止数字被第一位签名,产生数字9608242155010487637

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

为了澄清,我使用Python 2.7。

+0

您可能会在这里找到答案:http://stackoverflow.com/questions/5305456/python-how-do-i-convert -from-binary-to-base-64-and-back http://stackoverflow.com/questions/27016919/how-to-decode-base64-file-into-binary-in-python –

+0

@LoïcPoncin你真好,你正在寻找愚蠢的目标,但这两个问题都与这个问题无关。 –

回答

2

尝试bitstring模块:

>>> from bitstring import BitArray 
>>> s = '1000010101010111010101010101010101010101010101010111010101010101' 
>>> BitArray(bin=s).int 
-8838501918699063979 
+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 
+0

我得到一个结构错误'struct.error:解压需要一个长度为4的字符串参数' – DonutGaz

+0

我将'l'参数改为'q'以表示64位有符号长整数,修正了这个错误并给出了我是正确的结果。 – DonutGaz

相关问题