我将24位长的二进制数切成三个8位数的长数。 以下是我的代码:
def extract_number(number):
number_in_string = str(number)
red = number_in_string[:8]
green = number_in_string[8:16]
blue = number_in_string[16:24]
return [int(red), int(green), int(blue)]
if __name__ == '__main__':
print(extract_number(101111010110011011100100))
我从终端获得的结果是
[10111101, 1100110, 11100100]
问题出现在第二个号码中。当我执行number_in_string [8:16]时,它的数字不是8位数。我在这里使用切片功能错了吗?
答案 0 :(得分:2)
正确使用切片功能
In [28]: str(101111010110011011100100)[8:16]
Out[28]: '01100110'
第二个数字具有前导零,一旦将字符串转换为整数,该数字将被省略。
In [29]: int('01100110')
Out[29]: 1100110
您使用以十进制基数表示的数字,但请提及二进制基数。是否有一个原因?我想建议你使用二进制基础
def extract_number(number):
number_in_string = bin(number)[2:]
red = number_in_string[:8]
green = number_in_string[8:16]
blue = number_in_string[16:24]
return [int(red, 2), int(green, 2), int(blue, 2)]
if __name__ == '__main__':
print(extract_number(0b101111010110011011100100))
上面的代码输出
[189, 102, 228]
如果您需要这些数字的二进制表示,请使用内置bin
函数
答案 1 :(得分:1)
尝试按原样返回字符串。将它们转换为整数将从字符串中删除任何前导零(如果存在)。更正了代码 -
def extract_number(number):
number_in_string = str(number)
red = number_in_string[:8]
green = number_in_string[8:16]
blue = number_in_string[16:24]
return [red, green, blue]
if __name__ == '__main__':
print(extract_number(101111010110011011100100))
输出 -
['10111101', '01100110', '11100100']