我试图将一个二进制数转换为去掉0b字符串的形式。
我知道如何得到一个二进制数。
x = 17
print(bin(17))
'0b10001'
但我想要将字符串中的0b
去掉,但是在做这个操作时遇到了一些问题。这将会在一个返回没有0b
的二进制数的函数内实现。
使用切片操作删除前两个字符。
In [1]: x = 17
In [2]: y = bin(x)[2:]
In [3]: y
Out[3]: '10001'
def f(n):print('{:0b}'.format(n))
f(17)
>>> 10001
a = bin(17)
b = bin(17)[2:]
要将此格式化为8位,请使用zfill
。
c = b.zfill(8)
format(17, 'b')
>>> '10001'
format()
。如果要表示十六进制,只需用'x'
替换'b'
。
https://docs.python.org/3/library/functions.html#format
bin(n).replace("0b", "")
n
是提供的十进制数。使用Python 3.6,您可以使用f-strings。
print( f'{x:b}' )
'10001'
我不知道为什么没有人建议使用lstrip
。
integer = 17
bit_string = bin(integer)
final = bit_string.lstrip('-0b') # minus to also handle negations
print(final) # prints 10001
inhexa = (hexanum.get()) #获取十六进制值 dec = int(inhexa,16)#更改基数确保将其转换为16进制整数
b=bin(dec)[2:] #converts int/dec into binary and shows string except first two digits
由于此页面将回答对字节处理有兴趣的开发人员,因此应该对上述方法进行性能比较。
假设我们不需要填充(这个主题已经解决),上述解决方案(包括来自其他主题的最佳答案)给出了以下结果(针对1000万个随机的21位整数): 结果
基准测试可以在这里找到。
因此,使用f'{x:'b'}'的直观切片方法证明更快,而次之(在r5-3600 CPU和16GB 2133MHz 19CL系统内存上运行的结果是一致的)。
最终Diego Roccia的答案是最快且相当优雅的。
在此方法中,可以使用前导零填充和其他选项,详情请参见此处。但是,使用f'{x:'b'}' with .zfill() for padding比那里给出的解决方案更快(在此处找到实际测试)。
因此答案是:f'{x:'b'}'
x = 17
y = bin(17)
>>>'0b10001'
y.removeprefix("0b")
>>> '10001'