Как ограничить результат двоичного преобразования максимумом 8 бит (255)?

Как я могу ограничить результат до 8 бит? Мне нужно сложить два двоичных числа и преобразовать результат в десятичный. Как ограничить сумму 8 битами или 255?

def BinaryToDecimal(binaryNum):
    binaryList = []
    decimalNumber = 0

    while binaryNum != 0:
            remainder = binaryNum%10
            binaryList.append(remainder)
            binaryNum = int(binaryNum/10)

    for i in range(len(binaryList)-1,-1,-1):
        decimalNumber = decimalNumber + binaryList[i] * (2**i)

    return decimalnumber

2 ответа

Я написал для вас функцию:

def bin_to_dec(bits,fmt = None):
    if bits != 0:
        bits = str(bits)
        if fmt == 'big':
            bits = bits[:8]
        else:
            bits = bits[-8:]
        try:
            return int(bits,2)
        except ValueError:
            print("Enter bits only no number other than 1 and 0!!!")
    return 0

и при этом:

>>> print(bin_to_dec(11111111110000,'big'))
255
>>> print(bin_to_dec(11111111110000,'little'))
240

Просто передайте свой двоичный файл как int, если у вас есть строка, вы можете удалить bits = str(bits) строка из моего кода.fmtпредназначен для формата данных с прямым или обратным порядком байтов, зависит от вас. Чтобы понять, как использовать Little и Big Endian Check Here. По умолчанию мало, и при любой ошибке всегда возвращается 0.

Пример, если вы указали что-либо, кроме 1 или 0 в битах:

>>> print(bin_to_dec(11111112110000,'little'))
Enter bits only no number other than 1 and 0!!!
0

Вы получите 0 и бонусную печать

Предполагая, что вам нужны последние 8 бит вашего результата, простое решение - просто использовать модульную арифметику и использовать% 256 чтобы получить остаток от деления на 256.

def BinaryToDecimal(binaryNum):
    binaryList = []
    decimalNumber = 0

    while binaryNum != 0:
        remainder = binaryNum % 10
        binaryList.append(remainder)
        binaryNum = int(binaryNum / 10)

    for i in range(len(binaryList) - 1, -1, -1):
        decimalNumber = decimalNumber + binaryList[i] * (2 ** i) 

    return decimalNumber % 256 # You also had a typo in this line

Например:

BinaryToDecimal(11111100000000)
Out[1]: 0
BinaryToDecimal(11111111111111)
Out[2]: 255

В качестве альтернативы, если вы хотите вернуть 255, если ответ> 255, код будет следующим:

return decimalNumber if decimalNumber < 256 else 255

Это возвращает:

BinaryToDecimal(10000000)
Out[3]: 128
BinaryToDecimal(100000000)
Out[4]: 255
BinaryToDecimal(1000000000000)
Out[5]: 255

Между прочим: я исправил опечатку в returnи имена ваших переменных не соответствуют стилям Python PEP-8 - переменные должны быть в нижнем регистре, разделенные подчеркиванием, напримерbinary_num а также decimal_number

Другие вопросы по тегам