[英]Python 3 binary to hexadecimal with padding
在Python 3中,如何將帶有填充的二進制文件轉換為十六進制,例如“ 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)))
打印(BIN2HEX( “00001111”))
結果:“ F”
但它不包含0。
您犯了一個錯誤:十六進制字符等於四位 ,而不是八位:
def bin2hex(binary):
return ''.join(hex(int(binary[i:i+4], 2))[2:] for i in range(0, len(binary), 4))
話雖這么說,我認為您使事情變得太復雜了,您可以簡單地使用Python的字符串格式:
def bin2hex(binary):
return '{:02x}'.format(int(binary, 2))
或對於任意數量的位(可除以4):
def bin2hex(binary):
return '{:0{}x}'.format(int(binary, 2), len(binary)//4)
的一個比特數是不本身可分割由4:
def bin2hex(binary):
return '{:0{}x}'.format(int(binary, 2), (len(binary)+3)//4)
或使用字符串插值 ,例如@HåkenLid說:
def bin2hex(binary):
return f'{int(binary, 2):0{(len(binary)+3)//4}x}'
例如:
>>> bin2hex('0001')
'1'
>>> bin2hex('00011100')
'1c'
>>> bin2hex('000111001011')
'1cb'
>>> bin2hex('1101000111001011')
'd1cb'
一種簡單的方法是使用zfill
字符串方法。
def bin2hex(binary):
return hex(int(binary, 2))[2:].zfill(len(binary)//4)
bin2hex('00001111')
# >>> 0f
bin2hex('000000001111')
# >>> 00f
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.