没有从python中切片字符串得到正确的结果

时间:2015-11-01 03:32:10

标签: python

我将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位数。我在这里使用切片功能错了吗?

2 个答案:

答案 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']