Интерпретировать 32 бит как целое число в питоне - PullRequest
0 голосов
/ 23 мая 2019

Я читаю биты из файла.Первое значение -

bits = str(11101111010110011000000000000001)

Это двоичное представление 32-разрядного целого числа со знаком, так что оно уже в двоичном дополнении и в младшем порядке.Я думаю, что значение, которое я хочу получить:

-279347199

, по крайней мере, этот веб-сайт преобразует его как таковое http://www.binaryconvert.com/result_signed_int.html?hexadecimal=EF598001

все, что я нашел, что решает эту проблему, интерпретирует биты какчистый двоичный файл без двоичного дополнения и младшего порядкового номера

1 Ответ

0 голосов
/ 23 мая 2019

Отличный трюк для преобразования из дополнения до двух - найти 1 с конца и заменить остальные биты их дополнением.

def convert_from_twosc(bits):
    bits = bits[::-1]
    for bit in bits:
        if bit == '1':
            for new_bit in range(bits.index(bit) + 1, len(bits)):
                if bits[new_bit] == '0':
                    bits[new_bit] = '1'
                else:
                    bits[new_bit] = '0'
            break
    return "".join(map(str, bits[::-1]))
bits = input()
number = int(convert_from_twosc(list(bits)) , 2) * -1
print(number)

Выход:

11101111010110011000000000000001
-279347199

Эта функция всегда предполагает ввод, является отрицательным числом со знаком, поэтому будьте осторожны.

...