从十六进制转换为二进制值

问题描述 投票:1回答:2

我将一个值从十六进制转换为二进制值。我使用了python的bin(),如下所示:

value = 05808080
print bin(int(value, 16))

output i got is 0b101100000001000000010000000(output should be 32 bit)
output should be 0000 0101 1000 0000 1000 0000 1000 0000(correct output)

输出中的'b'是什么?如何用正确的二进制值替换它。我认为这里的两个值几乎相同,除了输出中的“b”问题。我将如何解决这个问题?

python-2.7 binary hex type-conversion
2个回答
1
投票

你得到的输出是正确的,它只需要格式化一点。领先的0b表示它是二进制数,类似于0x代表十六进制和0代表八进制。

首先,用0b切掉[2:]并使用zfill添加前导零:

>>> value = '05808080'
>>> b = bin(int(value, 16))
>>> b[2:]
'101100000001000000010000000'
>>> b[2:].zfill(32)
'00000101100000001000000010000000'

最后,以四个字符为间隔拆分字符串并将其与空格连接:

>>> s = b[2:].zfill(32)
>>> ' '.join(s[i:i+4] for i in range(0, 32, 4))
'0000 0101 1000 0000 1000 0000 1000 0000'

如果你可以没有那些分隔符空间,你也可以使用format string

>>> '{:032b}'.format(int(value, 16))
'00000101100000001000000010000000'

0
投票
def hex2bin(HexInputStr, outFormat=4):
    '''This function accepts the following two args.
    1) A Hex number as input string and
    2) Optional int value that selects the desired Output format(int value 8 for byte and 4 for nibble [default])
    The function returns binary equivalent value on the first arg.'''
    int_value = int(HexInputStr, 16)
    if(outFormat == 8):
        output_length = 8 * ((len(HexInputStr) + 1 ) // 2) # Byte length output i.e input A is printed as 00001010
    else:
        output_length = (len(HexInputStr)) * 4 # Nibble length output i.e input A is printed as 1010


    bin_value = f'{int_value:0{output_length}b}' # new style
    return bin_value

print(hex2bin('3Fa', 8)) # prints 0000001111111010
© www.soinside.com 2019 - 2024. All rights reserved.