簡體   English   中英

Python 3二進制到十六進制帶填充

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM