Как ограничить результат двоичного преобразования максимумом 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