微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 对输入的字符进行十六进制转十进制处理

对输入的字符进行十六进制转十进制处理

时间:11-28 来源:互联网 点击:
若是程序里的变量,直接用printf就可以对进制进行转换(%d %x %o等)。假如是对输入的字符进行进制转换,则要复杂一点。

想实现的目的是:对多个(理论对字符数设的上限是1000)输入的0(零)x或0X开头的十六进制转换为十进制输出。

我是分成以下几个步骤:

1.对行输入用数组s进行保存。(对这种输入处理,已经开始习惯先保存再处理的方式)

2.识别0x和0X标识。

3.以标识作为开始标志,空格作为结束标志,单独提取、计算、保存每一个输入位,转为十进制存入数组u。

4.为了方便计算,把u逆顺序保存为数组v(因为进制运算低位在右,但是数组顺序相反)。

5.按照(16^0)*n + (16^1)*m……的算法求出一组输入的十进制值(m、n为单个十六进制数转换成的十进制数),余下组以循环求得。

字符转十进制整数基于ASCII码(American Standard Code for Information Interchange全称方便记忆):



程序





执行(为了显示数组顺序,最后一组不够长截图):

总结:

1.C里面没有^这个运算符(实际上这是“位与”的位运算),不能直接写16^l。必须用里面的double pow(double x, double y);来求x的y次方,但同时,编译需要加入-lm选项:

#gcc htoi.c -lm -o htoi (顺序不能乱)

2.计算方法弄清楚之后,对于逻辑顺序问题,必须要写写画画。单凭脑子思考,很容易混乱。

3.程序里的变量名字太过简单,大程序要注意要严谨。还有省略了防御代码,对非法的输入格式没有任何防御。

4.猪脑,用了那么多t,u,v不如用容易理解的数组名……

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top