任务描述
十六进制也是计算机领域经常使用的一种进制,原因在于它的可读性比二进制更好,且它与二进制的转换十分直观。
十六进制共包含 16 个数字符号,分别是 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,其中 A~F 分别对应十进制中的 10~15。将二进制数转换成十六进制可以采用“四位变一位”的方法。以二进制数 1011010101 为例,如图所示,先将每 4 位划分为一组(若不能刚好分完,则补 0),然后按组转换,第 1 组 0010 对应 2、第 2 组 1101 对应 D(即 13)、第 3 组 0101 对应 5,所以 (1011010101)2=(2D5)16。
如果你不太熟悉该转换方法,可以参照上面的例题尝试以下计算:
- (10110)2=(16)16
- (1101100)2=(6C)16
- (11101010)2=(EA)16
本关任务是实现二进制整数到十六进制的转换。
相关知识
提示:定义列表L = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
,利用该列表可以简化按组转换的过程,如某组对应的十进制是 11
,则 L[11]
就是这组对应的十六进制符号。
此外,也可以利用 Python 的字典结构实现此过程,详见实验教材第 4.2.2 节。
编程要求
在 Begin-End 区间实现BinToHex(b)
函数,其功能是将二进制数b
转换为十六进制,说明如下:
1)b
是一个用字符串表示的二进制数;
2)在测试集中,b
均为正整数(如果你的程序还能处理其它情况则更好);
3)返回的十六进制也用字符串表示;
4)不准使用 Python 提供的进制转换函数。
########## Begin ##########
def BinToHex_int(b):
b=str(b)
if len(b)%4!=0:
b='0'*(4-len(b)%4)+b
L=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
h=''
for i in range(len(b)//4):
b4=b[4*i:4*(i+1)]
d=8*int(b4[0])+4*int(b4[1])+2*int(b4[2])+int(b4[3])
h=h+L[d]
return h
########## End ##########
b = input()
h = BinToHex_int(b)
print('%s -> %s' % (b, h))
注意输入数据的类型,b=input(),输入的是字符串,但是如果是总结输入一个数,就要在数计算前将数据用str函数转换为字符串。