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