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

时间:2016-02-23 08:53:27

标签: python-2.7 binary hex type-conversion

我将一个值从十六进制转换为二进制值。我使用了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"在输出中。我将如何解决这个问题?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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