【发布时间】:2013-08-22 06:52:54
【问题描述】:
我正在使用 Python 3.2.2。
我正在寻找一个转换二进制字符串的函数,例如'0b1010' 或 '1010' 转换成二进制文字,例如0b1010(不是字符串或十进制整数文字)。
自己动手是一件容易的事,但我更喜欢使用标准函数或成熟的函数:我不想“重新发明轮子”。
无论如何,我很高兴看到你们可能拥有的任何高效算法。
【问题讨论】:
标签: python python-3.x
我正在使用 Python 3.2.2。
我正在寻找一个转换二进制字符串的函数,例如'0b1010' 或 '1010' 转换成二进制文字,例如0b1010(不是字符串或十进制整数文字)。
自己动手是一件容易的事,但我更喜欢使用标准函数或成熟的函数:我不想“重新发明轮子”。
无论如何,我很高兴看到你们可能拥有的任何高效算法。
【问题讨论】:
标签: python python-3.x
字符串是文字。
3>> bin(int('0b1010', 2))
'0b1010'
3>> bin(int('1010', 2))
'0b1010'
3>> 0b1010
10
3>> int('0b1010', 2)
10
【讨论】:
print('0b1010')吗?
试试下面的代码:
#!python3
def fn(s, base=10):
prefix = s[0:2]
if prefix == '0x':
base = 16
elif prefix == '0b':
base = 2
return bin(int(s, base))
print(fn('15'))
print(fn('0xF'))
print(fn('0b1111'))
如果你确定你有s = "'0b010111'"并且你只想得到010111,那么你可以像这样切中间:
s = s[2:-1]
即从索引 2 到最后一个。
但正如 Ignacio 和 Antti 所写,数字是抽象的。 0b11 是数字 3 的字符串表示形式之一,与 3 是数字 3 的另一种字符串表示形式相同。
repr() 总是返回一个字符串。对repr 结果唯一可以做的就是去掉撇号——因为repr 将撇号添加到字符串表示中以强调它是字符串表示。如果您想要数字的二进制表示(作为不带撇号的字符串),那么bin() 是最终答案。
【讨论】:
0b1 ^ 0b10,但不能使用'0b1' ^ '0b10',并且使用bin 不会改变这一点。
bin() 将字符串表示形式返回为二进制数。在进行异或运算时,您希望将其保留为抽象数。对于这种情况,您只需在返回线移除 bin 包装器(但这不是问题)。或者您可以编写一个函数,对位的字符串表示实现异或操作。