number = bin(16383)[2:]
dict = ([number[num:num+7].zfill(7) for num in range(0, len(number), 7)])
我想从 ['1111111', '1111111']
到 ['01111111', '11111111']
然后将其从二进制转换为十六进制
从你已经拥有这个列表的地方开始,你可以执行一个列表理解。['1111111', '1111111']
,你可以通过调用一些内置函数来进行列表理解,以达到你想要的目的。
这里有两种方法(考虑到 l
为前述名单)。)
[hex(int(prefix + binary, 2)) for prefix, binary in zip('0' + (len(l) - 1) * '1', l)]
# When measuring it with timeit, and a number=1000000, it returns 3.360108 seconds
或
[hex(int('0' + binary if i == 0 else '1' + binary, 2)) for i, binary in enumerate(l)]
# When measuring it with timeit, and a number=1000000, it returns 3.048211 seconds
它们都会产生以下输出。
['0x7f', '0xff']
EDIT:
考虑到你提供的链接,你是在做二进制文件列表(l
)的方式错误。你可以按以下方式进行。
number = bin(16383)[2:]
bytes_ = [number[max(0, i - 7): i].zfill(7) for i in range(len(number), 0, -7)]
bytes_.reverse()
hex_list = [hex(int(prefix + binary, 2)) for prefix, binary in
zip((len(bytes_) - 1) * '1' + '0', bytes_)]
# hex_list content: ['0xff', '0x7f']