用Python实现十六进制向十进制转换

0. 引言

最近心血来潮,想通过对比C语言数据结构和Python语言数据结构异同,加深对二者的学习理解。特从最基础的开始复习,首先遇到了指针,以及指针地址的理解。突发奇想,尝试用Python练习下如何将十六进制数转换为十进制数。(作为一只还在纠结指针的菜鸟,此刻内心已经感受到了大牛们关爱制杖的眼神。)

1. C语言中的地址

先看代码:

#include <stdio.h>
int main()
{int i=26;printf("i(十进制)=%d.\n",i);         #查看i的值(十进制);printf("&i(十六进制)=%p.\n", &i);   #查看i的地址(十六进制);printf("&i(十进制)=%d.\n",&i);       #查看i的地址(十进制);printf("i(十六进制)=%p.\n",i);     #查看i的值(十六进制);return 0;
}

输出:

i(十进制)=26.
&i(十六进制)=000000000062FE1C.
&i(十进制)=6487580.
i(十六进制)=000000000000001A.

众所周知,就算电脑有毛病,也能得出上述结果。C语言中的十进制和十六进制互换用printf()中的%p和%d可以实现,但是Python语言是面向对象语言,对变量存储地址没有太多要求,有一个id()的函数用于获取对象的内存地址。此时,“做一个十六进制到十进制转换的函数”的念头就像晴空万里突然暴风雨无处躲避,没办法,写一个吧。(也许python中很简单的转换函数,希望各位大牛留言告知。)

2. Python语言实现

先看代码:

import math
def convertDectoHex(a):al=list(a)b={'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}multi=0sumof=0for i in range(len(a)):if al[i] in b.keys():#如果al[i]的值在字典b的keys中,则:multi=int(b[al[i]])else:multi=int(al[i])sumof+=multi*math.pow(16,len(a)-i-1)return sumof
a=input('16进制:')
print('十六进制的{}化成十进制为{}.'.format(a,convertDectoHex(a)))

Fn+F5运行这段程序:

16进制: 62FE1C
输 出 : 十六进制的62FE1C化成十进制为6487580.0.

这明显没有任何问题,所以,我写这篇文章的重点是什么?

3. Python语言代码需要重点关注的问题

上面那段并不长的代码有两处需要重点关注的点:
  重点一:数据类型转换'str'-->'int'

a=input('16进制:')

运行后输入62FE1C,得到:a='62FE1C'但是,type(a)=<class ‘str’>。在自定义函数中al=list(a),将字符串变成列表,但是列表中的元素依然是字符串类型:type(al[0])=<class 'str'>
  各位大佬也很清楚,字符串是没法运算的。所以,需要强制数据类型转换:multi=int(b[al[i]]),即:1.在字典中取出key是al[i]对应的value,2.在将其转化为int类型。其实,这一步可以不做,因为在创建字典b时就已经输入了数值类型值。后面的multi=int(al[i])也是类似操作。
  重点二:字典dict()中‘键’和‘值’的使用
  程序中if al[i] in b.keys():是判断输入的十六进制数中是否有‘A’, 'B', 'C', 'D', 'E', 'F'这些值,如果有则取出字典中他们对应的数值。

4. 结语

下面进行技术总结(咦,似乎在哪里听过?):1.注意字符串转换为数值类型;2.字典很强大,该用就用。

用Python实现十六进制向十进制转换相关推荐

  1. python:实现十六进制转十进制算法(附完整源码)

    python:实现十六进制转十进制算法 hex_table = {hex(i)[2:]: i for i in range(16)} # Use [:2] to strip off the leadi ...

  2. Python 十六进制,十进制转换

    1. 十进制转十六进制 hex(number) 2. 十六进制转十进制 hex(number) 3. 十六进制字符串转十进制 int(number,16) 4. 十六进制字符串转十六进制 hex(in ...

  3. python实现十六进制转十进制

    先来看下十六进制的定义以及表示方式,以下是百度百科上的解释: 十六进制(简写为hex或下标16)是一种基数为16的计数系统,是一种逢16进1的进位制.通常用数字0.1.2.3.4.5.6.7.8.9和 ...

  4. 十六进制与十进制转换

    今天被给到一段代码,数字全部是十六进制,学习一下. 0x开头就是十六进制,0开头由0~7组成是八进制. 十六进制转换十进制: 末尾从16^0次方开始,每一位数字乘以16的位数次方. 其中a=10 b= ...

  5. php压缩bcd码,BCD码和十六进制,十进制转换

    android studio adb bogon:platform-tools alamps$ echo $HOME /Users/alamps bogon:platform-tools alamps ...

  6. python中二进制转化为十进制_将二进制、八进制、十六进制转换为十进制

    学习视频 9节课征服「字符编码」-1-字符.字符集.字符编号与字符编码(基础课)-周华健的在线视频教程​edu.csdn.net 二进制.八进制和十六进制向十进制转换都非常容易,就是"按权相 ...

  7. 进制转换:二进制、八进制、十六进制、十进制之间的转换

    进制转换:二进制.八进制.十六进制.十进制之间的转换 不同进制之间的转换在编程中经常会用到,尤其是C语言. 将二进制.八进制.十六进制转换为十进制 二进制.八进制和十六进制向十进制转换都非常容易,就是 ...

  8. c语言中十进制转化二进制八进制十六进制,进制转换:二进制、八进制、十六进制、十进制之间的转换...

    对于基础薄弱的读者,本节的内容可能略显晦涩和枯燥,如果觉得吃力,可以暂时跳过,用到的时候再来阅读.但是本节所讲的内容是学习编程的基础,是程序员的基本功,即使现在不学,迟早也要回来学. 上节我们对二进制 ...

  9. 十进制小数化为二进制小数的方法是什么_10、进制转换:二进制、八进制、十六进制、十进制之间的转换...

    上节我们对二进制.八进制和十六进制进行了说明,本节重点讲解不同进制之间的转换,这在编程中经常会用到,尤其是C语言. 将二进制.八进制.十六进制转换为十进制 二进制.八进制和十六进制向十进制转换都非常容 ...

最新文章

  1. JavaScript装饰器模式
  2. 手把手教你搭建用户画像,数据分析效率提升百倍
  3. SQL组合查询union
  4. java 双向链表_23张图!万字详解「链表」,从小白到大佬
  5. 关店9000家,市值蒸发90%,女装巨头大崩溃的根源找到了
  6. web前端基础(02html表格)
  7. 印染面料产品出现纬斜疵病,应该怎么防止?
  8. hb:一个简单的 http/web bench 工具
  9. 第一章 Shell基础知识
  10. java怎么控制数据权限_Java权限控制算法
  11. 怎样才算是优质的Scratch作品?
  12. 年会抽奖(错排算法)
  13. 网站云服务器 网络拓扑,云服务器网络结构拓扑图
  14. python arp断网攻击_arp断网攻击,教您arp断网攻击怎么解决
  15. 经典逻辑题:猜牌问题——网上的结论是没问题的
  16. CV文章摘要中文翻译集(目标检测,纹理分类)
  17. 水下机器人之电机控制
  18. Facebook新财报:不惧“隐私门“事件影响,广告业务依然增长强劲
  19. 名人热议新iPhone:5S中规中矩5C莫名其妙
  20. 91个排名:中国知名个人站长及发家史

热门文章

  1. 如何更换jdk版本?(以在win10操作系统上把jdk8更换为jdk9为例)
  2. Apple Developer 注册(转)
  3. JAVA游戏开发之FPS精准控制
  4. Java基础算术运算符
  5. Unity 性能最高的Shader: Unlit
  6. 政务大数据智慧监管反诈骗大数据分析html模板案例
  7. iOS Touches事件处理知识总结
  8. 一张图揭秘Java自学和培训的区别
  9. 创意多彩配色时尚PPT幻灯片设计模板 Dianz – Business PowerPoint Template
  10. 企业邮箱的CardDAV是什么,如何设置?