2017-02-22 48 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

相關問題