在Python中有任何罐装的Python方法将整数(或长)转换为二进制字符串吗?

谷歌上有无数的dec2bin()函数…但我希望我可以使用内置函数/库。


当前回答

try:
    while True:
        p = ""
        a = input()
        while a != 0:
            l = a % 2
            b = a - l
            a = b / 2
            p = str(l) + p
        print(p)
except:
    print ("write 1 number")

其他回答

作为参考:

def toBinary(n):
    return ''.join(str(1 & int(n) >> i) for i in range(64)[::-1])

这个函数可以将一个正整数一样大18446744073709551615,表示为字符串“1111111111111111111111111111111111111111111111111111111111111111”。

它可以被修改为一个更大的整数,尽管它可能不像"{0:b}".format()或bin()那么方便。

try:
    while True:
        p = ""
        a = input()
        while a != 0:
            l = a % 2
            b = a - l
            a = b / 2
            p = str(l) + p
        print(p)
except:
    print ("write 1 number")

我很惊讶,没有提到一个很好的方法来实现这一点,使用Python 3.6及更高版本支持的格式化字符串。TLDR:

>>> number = 1
>>> f'0b{number:08b}'
'0b00000001'

长故事

这是Python 3.6提供的格式化字符串的功能:

>>> x, y, z = 1, 2, 3
>>> f'{x} {y} {2*z}'
'1 2 6'

你也可以请求二进制文件:

>>> f'{z:b}'
'11'

指定宽度:

>>> f'{z:8b}'
'      11'

请求零填充:

f'{z:08b}'
'00000011'

并添加公共前缀表示二进制数:

>>> f'0b{z:08b}'
'0b00000011'

你也可以让Python为你添加前缀,但我不喜欢上面的版本,因为你必须把前缀考虑到宽度:

>>> f'{z:#010b}'
'0b00000011'

更多信息可在格式化字符串文字和格式规范迷你语言的官方文档中获得。

除非我误解了你所说的二进制字符串,我认为你要找的模块是struct

如果你想要一个没有0b前缀的文本表示,你可以使用这个:

get_bin = lambda x: format(x, 'b')

print(get_bin(3))
>>> '11'

print(get_bin(-3))
>>> '-11'

当你想要n位表示时:

get_bin = lambda x, n: format(x, 'b').zfill(n)
>>> get_bin(12, 32)
'00000000000000000000000000001100'
>>> get_bin(-12, 32)
'-00000000000000000000000000001100'

或者,如果你喜欢有一个函数:

def get_bin(x, n=0):
    """
    Get the binary representation of x.

    Parameters
    ----------
    x : int
    n : int
        Minimum number of digits. If x needs less digits in binary, the rest
        is filled with zeros.

    Returns
    -------
    str
    """
    return format(x, 'b').zfill(n)