0

我正在尝试将代码从 php 转换为 python。我有一个二进制文字列表-

['0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b100', '0b1001100']

这等于0000000000000000000000000000000000000000000000000000010001001100连接时。

int("0000000000000000000000000000000000000000000000000000010001001100",2)

1100

我如何从列表中制作这个。无法连接二进制文字。

4

4 回答 4

1
>>> l = ['0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b100', '0b1001100']
>>> int("".join("%02x" % int(x,0) for x in l), 16)
1100

Python 将其理解0b0101为二进制文字,因此我使用int('0b0101', 0)将每个部分转换为 int。然后我以方便的格式(两位十六进制)对其进行格式化,将它们连接起来,并将它们解释为十六进制整数。

于 2012-12-09T22:33:21.147 回答
1

您需要 zfill 方法用正确数量的零填充您的元素

li = ['0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b100', '0b1001100']
zero_padded = [x[2:].zfill(8) for x in li]
print ''.join(zero_padded)

输出

0000000000000000000000000000000000000000000000000000010001001100
于 2012-12-09T22:35:02.203 回答
0

只需剥离0b

binary = ''.join(x[2:] for x in yourlist)
print binary
print int(binary, 2)
于 2012-12-09T22:29:03.547 回答
0

这对你来说够丑吗:

int(''.join([i for sl in [s[2:].zfill(8) for s in l] for i in sl]),2)

(它似乎工作。)

也许这更具可读性:

l = ['0b0', '0b0', '0b0', '0b0', '0b0', '0b0', '0b100', '0b1001100']
n = 0
for s in l:
    n = n*256 + int(s,2)
print n
于 2012-12-09T22:39:16.500 回答