去掉二进制中的0b前缀

16
我试图将一个二进制数转换为去掉0b字符串的形式。 我知道如何得到一个二进制数。
x = 17

print(bin(17))

'0b10001'

但我想要将字符串中的0b去掉,但是在做这个操作时遇到了一些问题。这将会在一个返回没有0b的二进制数的函数内实现。

11个回答

20

使用切片操作删除前两个字符。

In [1]: x = 17

In [2]: y = bin(x)[2:]

In [3]: y
Out[3]: '10001'

5
很简单,只需编写以下函数:

def f(n):print('{:0b}'.format(n))
f(17)
>>> 10001

5
使用Python字符串的切片操作。
a = bin(17)
b = bin(17)[2:]

要将此格式化为8位,请使用zfill

c = b.zfill(8) 

4

1
十六进制是“x”,不是“h”——有关所有说明符,请参见https://docs.python.org/3/library/string.html#format-specification-mini-language - NikT

2
bin(n).replace("0b", "") 

这个示例使用 replace 方法,其中 n 是提供的十进制数。

2

使用Python 3.6,您可以使用f-strings。

print( f'{x:b}' )
'10001'

1

我不知道为什么没有人建议使用lstrip

integer = 17
bit_string = bin(integer)
final = bit_string.lstrip('-0b') # minus to also handle negations
print(final) # prints 10001

注意,当输入为0时,此函数返回一个空字符串。 - mbpaulus

0

inhexa = (hexanum.get()) #获取十六进制值 dec = int(inhexa,16)#更改基数确保将其转换为16进制整数

 b=bin(dec)[2:]  #converts int/dec into binary and shows string except first two digits

0

由于此页面将回答对字节处理有兴趣的开发人员,因此应该对上述方法进行性能比较。

假设我们不需要填充(这个主题已经解决),上述解决方案(包括来自其他主题的最佳答案)给出了以下结果(针对1000万个随机的21位整数): 结果

基准测试可以在这里找到。

因此,使用f'{x:'b'}'直观切片方法证明更快,而次之(在r5-3600 CPU和16GB 2133MHz 19CL系统内存上运行的结果是一致的)。

最终Diego Roccia答案是最快且相当优雅的。

在此方法中,可以使用前导零填充和其他选项,详情请参见此处。但是,使用f'{x:'b'}' with .zfill() for padding比那里给出的解决方案更快(在此处找到实际测试)。

因此答案是f'{x:'b'}'


目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

0
嗯,最简单的方法是使用Python 3.9.0及以上版本的字符串removeprefix()函数,它可以去除前缀并返回字符串的剩余部分。
x = 17

y = bin(17)
>>>'0b10001'

y.removeprefix("0b")
>>> '10001'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接