2017-02-22 4 views
2

Против рекомендаций онлайн-ресурсов я использую Python для выполнения простого смещения битов в одном из моих сценариев. Сдвиг битов в порядке, это результат, который трудно. Позволь мне объяснить.Преобразование двоичного представления в подписанное 64-битное целое число в Python

У меня 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 'struct.error: unpack требует строкового аргумента длины 4' – DonutGaz

+0

Я изменил аргумент' l' на 'q', чтобы представить 64-битную подписанную длинную, которая исправила эту ошибку и дала мне правильный результат. – DonutGaz

Смежные вопросы