二进制到十六进制

任务描述

  十六进制也是计算机领域经常使用的一种进制,原因在于它的可读性比二进制更好,且它与二进制的转换十分直观。
  十六进制共包含 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函数转换为字符串。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

省心省事省时

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值