Python3带填充的二进制到十六进制

Python3带填充的二进制到十六进制,python,python-3.x,Python,Python 3.x,在Python3中,我如何将二进制转换为带填充的十六进制,例如“00001111”将等于“0F”,我希望它也包括一个没有附加0x的0。我使用它将二进制转换为十六进制: def bin2hex(binary): return ''.join((hex(int(binary[i:i+8], 2))[2:] for i in range(0, len(binary), 8))) 打印(二进制十六进制(“00001111”)) 结果:“F” 但它不包含0。您犯了一个错误:十六进制字符相当于四位,而不是

在Python3中,我如何将二进制转换为带填充的十六进制,例如“00001111”将等于“0F”,我希望它也包括一个没有附加0x的0。我使用它将二进制转换为十六进制:

def bin2hex(binary):
return ''.join((hex(int(binary[i:i+8], 2))[2:] for i in range(0, len(binary), 8)))
打印(二进制十六进制(“00001111”))

结果:“F”


但它不包含0。

您犯了一个错误:十六进制字符相当于四位,而不是八位:

def bin2hex(binary):
    return ''.join(hex(int(binary[i:i+4], 2))[2:] for i in range(0, len(binary), 4))
或对于任意数量的位(可除以4):

对于本身不可除以4的位数:

def bin2hex(binary):
    return '{:0{}x}'.format(int(binary, 2), len(binary)//4)
def bin2hex(binary):
    return '{:0{}x}'.format(int(binary, 2), (len(binary)+3)//4)
或者使用字符串插值,如所述:

例如:

>>> bin2hex('0001')
'1'
>>> bin2hex('00011100')
'1c'
>>> bin2hex('000111001011')
'1cb'
>>> bin2hex('1101000111001011')
'd1cb'

一种简单的方法是使用
zfill
string方法

def bin2hex(binary):
    return hex(int(binary, 2))[2:].zfill(len(binary)//4)

bin2hex('00001111')
# >>> 0f

bin2hex('000000001111')
# >>> 00f

如果二进制数在同一时间有更多的
0
s,则第二个解决方案将不起作用front@Stephen:为什么不?@HåkenLid:他的意思是它不会为
000000001111
写入
00f
@HåkenLid,因为2的字符串格式只会添加一个
0
。如果你在他的二进制数前面再加4个
0
s,它仍然会出现
0f
我明白。我没听清楚问题的那一部分。在第二个函数中,如果使用的是python 3.6或更高版本,也可以使用f字符串:
f'{int(b,2):0{len(b)//4}x}'
>>> bin2hex('0001')
'1'
>>> bin2hex('00011100')
'1c'
>>> bin2hex('000111001011')
'1cb'
>>> bin2hex('1101000111001011')
'd1cb'
def bin2hex(binary):
    return hex(int(binary, 2))[2:].zfill(len(binary)//4)

bin2hex('00001111')
# >>> 0f

bin2hex('000000001111')
# >>> 00f