【问题标题】:Convert binary string to binary literal将二进制字符串转换为二进制文字
【发布时间】:2013-08-22 06:52:54
【问题描述】:

我正在使用 Python 3.2.2。

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

自己动手是一件容易的事,但我更喜欢使用标准函数或成熟的函数:我不想“重新发明轮子”。

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

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    字符串文字。

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

    【讨论】:

    • 谢谢。这些操作的输出是字符串和十进制整数。我想要一个二进制文字发送到标准输出。再次感谢。
    • 你试过print('0b1010')吗?
    • 这行得通,但它仍然是一个字符串。我不应该提到标准输出:我需要一个返回真正二进制 int 的函数。我意识到返回一个十进制整数通常会同样有效,但我想要一个 bin int。谢谢,伊格纳西奥。
    • 没有“二进制整数”这样的东西。整数是整数,并且与基数无关。只有文字(输入)和表示(输出)是基数相关的。
    • 其实,更准确的说,python中没有十进制整数这种东西,所有的整数在内存中都是二进制的。
    【解决方案2】:

    试试下面的代码:

    #!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 不会改变这一点。
    • @dsaxton:bin() 将字符串表示形式返回为二进制数。在进行异或运算时,您希望将其保留为抽象数。对于这种情况,您只需在返回线移除 bin 包装器(但这不是问题)。或者您可以编写一个函数,对位的字符串表示实现异或操作。
    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多