用Python实现十六进制向十进制转换
用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实现十六进制向十进制转换相关推荐
- python:实现十六进制转十进制算法(附完整源码)
python:实现十六进制转十进制算法 hex_table = {hex(i)[2:]: i for i in range(16)} # Use [:2] to strip off the leadi ...
- Python 十六进制,十进制转换
1. 十进制转十六进制 hex(number) 2. 十六进制转十进制 hex(number) 3. 十六进制字符串转十进制 int(number,16) 4. 十六进制字符串转十六进制 hex(in ...
- python实现十六进制转十进制
先来看下十六进制的定义以及表示方式,以下是百度百科上的解释: 十六进制(简写为hex或下标16)是一种基数为16的计数系统,是一种逢16进1的进位制.通常用数字0.1.2.3.4.5.6.7.8.9和 ...
- 十六进制与十进制转换
今天被给到一段代码,数字全部是十六进制,学习一下. 0x开头就是十六进制,0开头由0~7组成是八进制. 十六进制转换十进制: 末尾从16^0次方开始,每一位数字乘以16的位数次方. 其中a=10 b= ...
- php压缩bcd码,BCD码和十六进制,十进制转换
android studio adb bogon:platform-tools alamps$ echo $HOME /Users/alamps bogon:platform-tools alamps ...
- python中二进制转化为十进制_将二进制、八进制、十六进制转换为十进制
学习视频 9节课征服「字符编码」-1-字符.字符集.字符编号与字符编码(基础课)-周华健的在线视频教程edu.csdn.net 二进制.八进制和十六进制向十进制转换都非常容易,就是"按权相 ...
- 进制转换:二进制、八进制、十六进制、十进制之间的转换
进制转换:二进制.八进制.十六进制.十进制之间的转换 不同进制之间的转换在编程中经常会用到,尤其是C语言. 将二进制.八进制.十六进制转换为十进制 二进制.八进制和十六进制向十进制转换都非常容易,就是 ...
- c语言中十进制转化二进制八进制十六进制,进制转换:二进制、八进制、十六进制、十进制之间的转换...
对于基础薄弱的读者,本节的内容可能略显晦涩和枯燥,如果觉得吃力,可以暂时跳过,用到的时候再来阅读.但是本节所讲的内容是学习编程的基础,是程序员的基本功,即使现在不学,迟早也要回来学. 上节我们对二进制 ...
- 十进制小数化为二进制小数的方法是什么_10、进制转换:二进制、八进制、十六进制、十进制之间的转换...
上节我们对二进制.八进制和十六进制进行了说明,本节重点讲解不同进制之间的转换,这在编程中经常会用到,尤其是C语言. 将二进制.八进制.十六进制转换为十进制 二进制.八进制和十六进制向十进制转换都非常容 ...
最新文章
- JavaScript装饰器模式
- 手把手教你搭建用户画像,数据分析效率提升百倍
- SQL组合查询union
- java 双向链表_23张图!万字详解「链表」,从小白到大佬
- 关店9000家,市值蒸发90%,女装巨头大崩溃的根源找到了
- web前端基础(02html表格)
- 印染面料产品出现纬斜疵病,应该怎么防止?
- hb:一个简单的 http/web bench 工具
- 第一章 Shell基础知识
- java怎么控制数据权限_Java权限控制算法
- 怎样才算是优质的Scratch作品?
- 年会抽奖(错排算法)
- 网站云服务器 网络拓扑,云服务器网络结构拓扑图
- python arp断网攻击_arp断网攻击,教您arp断网攻击怎么解决
- 经典逻辑题:猜牌问题——网上的结论是没问题的
- CV文章摘要中文翻译集(目标检测,纹理分类)
- 水下机器人之电机控制
- Facebook新财报:不惧“隐私门“事件影响,广告业务依然增长强劲
- 名人热议新iPhone:5S中规中矩5C莫名其妙
- 91个排名:中国知名个人站长及发家史