我只是想把一个以2为基数的二进制数字字符串转换成一个int型,就像这样:
>>> '11111111'.fromBinaryToInt()
255
在Python中有办法做到这一点吗?
我只是想把一个以2为基数的二进制数字字符串转换成一个int型,就像这样:
>>> '11111111'.fromBinaryToInt()
255
在Python中有办法做到这一点吗?
当前回答
递归Python实现:
def int2bin(n):
return int2bin(n >> 1) + [n & 1] if n > 1 else [1]
其他回答
递归Python实现:
def int2bin(n):
return int2bin(n >> 1) + [n & 1] if n > 1 else [1]
如果您正在使用python3.6或更高版本,则可以使用f-string来执行 转换:
二进制到十进制:
>>> print(f'{0b1011010:#0}')
90
>>> bin_2_decimal = int(f'{0b1011010:#0}')
>>> bin_2_decimal
90
二进制到八进制到六进制等等。
>>> f'{0b1011010:#o}'
'0o132' # octal
>>> f'{0b1011010:#x}'
'0x5a' # hexadecimal
>>> f'{0b1011010:#0}'
'90' # decimal
注意用冒号分隔的两条信息。
这样,通过更改冒号[:]右侧,可以在{二进制,八进制,十六进制,十进制}之间转换为{二进制,八进制,十六进制,十进制}
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0 -> converts to decimal as above example
试着把冒号的左边改成八进制/十六进制/十进制。
下面是另一种简洁的方法,上面的答案中没有提到:
>>> eval('0b' + '11111111')
255
不可否认,它可能不是很快,如果字符串来自您无法控制的东西,可能是恶意的(比如用户输入),这是一个非常非常糟糕的主意,但为了完整性,它确实有效。
另一种方法是使用bitstring模块:
>>> from bitstring import BitArray
>>> b = BitArray(bin='11111111')
>>> b.uint
255
注意无符号整数不同于有符号整数:
>>> b.int
-1
bitstring模块不是必需的,但它有许多性能方法,用于将输入转换为比特或将比特转换为其他形式,以及操作它们。
使用内置的int()函数,并将输入数的基数传递给它,即二进制数为2:
>>> int('11111111', 2)
255
这里是Python 2和Python 3的文档。