将二进制字符串转换为二进制文字

时间:2013-08-22 06:52:55

标签: python python-3.x

我正在使用Python 3.2.2。

我正在寻找一个转换二进制字符串的函数,例如'0b1010'或'1010',二进制文字,例如0b1010(不是字符串或十进制整数文字)。

滚动我自己很容易,但我更喜欢使用标准功能或完全成熟的功能:我不想'重新发明轮子'。

无论如何,我很高兴看到你们可能拥有的任何有效算法。

2 个答案:

答案 0 :(得分:7)

字符串 是文字。

3>> bin(int('0b1010', 2))
'0b1010'
3>> bin(int('1010', 2))
'0b1010'
3>> 0b1010
10
3>> int('0b1010', 2)
10

答案 1 :(得分:0)

请尝试以下代码:

#!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到最后一个之前的那个。

但正如伊格纳西奥和安提所写的,数字是抽象的。 0b11是数字3的字符串表示之一,与3是数字3的另一个字符串表示形式相同。

repr()始终返回字符串。使用repr结果唯一可以做的就是去除撇号 - 因为repr将撇号添加到字符串表示中以强调它是字符串表示。如果你想要一个数字的二进制表示(作为没有撇号的字符串),那么bin()就是最终答案。