2013-08-22 98 views
2

我正在使用Python 3.2.2。将二进制字符串转换为二进制文字

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

这是一件很容易的事情,但我宁愿使用一种标准功能或一种已经很成熟的功能:我不想“重新发明轮子”。

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

回答

2

字符串的文字。

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

谢谢。这些操作的输出是字符串和十进制整数。我想要一个二进制文字发送到标准输出。再次感谢。 –

+0

您是否试过'print('0b1010')'? –

+0

这有效,但它仍然是一个字符串。我不应该提到stdout:我需要一个返回true binary的函数。我意识到返回一个十进制整数通常是有效的,但我想要一个bin int。 Thx,Ignacio。 –

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()是最终的答案。

+0

如果您想在计算中使用该数字,该怎么办?例如,我们可以使用'0b1^0b10'而不是''0b1'^'0b10',并且使用'bin'不会改变它。 – dsaxton

+0

@dsaxton:'bin()'返回一个字符串表示形式的二进制数。在进行排他或操作时,您需要将其保留为抽象号码。对于这种情况,你只需在返回行删除bin wrapper(但这不是问题)。或者你可以编写一个函数来实现位字符串表示的异或操作。 – pepr

相关问题