我在python项目的Visual Studio上工作,我有这个十六进制数字;
sudo
因此,我需要从该数字中获取8位二进制数,并且我想显示该十六进制数如下所示:
0110200a03
例如,每个数字末尾都会逐步显示它,例如 0 = 0000 1 = 0001 十六进制数会很长,但看起来只是一个数字,所以
我这样写的程序:
00000001 00010000 00100000 00001011 00000011
所以输出二进制文件看起来像这样:
def hex_to_words():
print ("Enter 'x' for exit. ");
hexdec = input("Enter any number in Hexadecimal form ");
if hexdec == 'x':
exit();
else:
dec = int(hexdec,16)
print(hexdec + " in Binary = " + bin(dec)[2:]);
hex_to_words()
但是,当我只尝试“ 01”时,它会同时计算所有数字,但在输出中只给出“ 1”,但是我想获得“ 00000001”。
有什么办法吗?
答案 0 :(得分:2)
只需在其前面添加0x即可代表十六进制数字
>>> a=0x0110200a03
>>> a
4565502467
>>> bin(a)
'0b100010000001000000000101000000011'
关于第二个问题,只需使用格式化功能
>>> a=0x1
>>> bin(a)
'0b1'
>>> a=0x1
>>> '{0:08b}'.format(a)
'00000001'
但这只是将输出格式化为8位
编辑 这会将数字转换为另一个数字,该数字前面填充有零,并将该数字的切片切成8个块并显示
from __future__ import print_function
import math
a=0x0110200a03
string=bin(a)[2:]
length=len(string)
resultingnumberlength=int(math.ceil((length)/float(8)))
resultnumber=string.zfill(resultingnumberlength*8)
for binarystring in range(0,len(resultnumber),8):
print(resultnumber[binarystring:binarystring+8],end=" ")
print()
输出
00000001 00010000 00100000 00001010 00000011
答案 1 :(得分:0)
一种可能的解决方案是使用bitstring。修改代码:
import bitstring as bs
def hex_to_words():
print("Enter 'x' for exit. ")
hexdec = input("Enter any number in Hexadecimal form ")
if hexdec == 'x':
exit()
else:
dec = int(hexdec,16)
b=bin(dec)
b=bs.BitArray(b)
b=[ byte for byte in b.cut(8)]
print([x.bin for x in b])