一个快速将十六进制串转十进制数的方法
来源:互联网 发布:淘宝优惠券领取网站 编辑:程序博客网 时间:2024/05/05 16:59
今天看到一段将十六进制数的字符转十进制的代码,写得太精妙了。我就又占了前辈们的光,在其基础上扩充了一下,写了个将十六进制字符串转十进制数的接口,和大家分享分享。
编译运行,其结果如下:
这个程序没有做过充分的测试,不足之处恳请各位予以指正,谢谢。
点击(此处)折叠或打开
- /******************************hex2digit.c*****************************************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define HEXTD(x) (((x)<='9')?((x)-'0'):(((x)&7)+9)) //这就是那段精妙的核心代码
- /* hex_to_digit:将一个由字符串表示的十六进制字串转换成其对应的十进制数。
- * 输入: src 十六进制的字串。
- * 输出: sum 用于接收转换后的结果。
- * 返回值: -1 表示输入的数据有错误;-2 表示输入字串中有非法的字符; 0 表示转换成功。
- */
- int hex_to_digit(unsigned int *sum,char* src){
- if(!src || !sum || strlen(src) == 0)
- return -1;
- *sum ^=*sum;
- while(src && *src!='\0'){
- if(!((*src>='0')&&(*src<='9'))&&!((*src>='a')&&(*src<='f'))&&!((*src>='A')&&(*src<='F')))
- return -2;
- *sum = ((*sum << 4) | HEXTD(*src));
- src++;
- }
- return 0;
- }
- int main(int argc,char** argv){
- unsigned int a;
- int ret = hex_to_digit(&a,argv[1]);
- if(ret==-1)
- printf("input error!\n");
- else if(ret==-2)
- printf("illegal letter in string!\n");
- else
- printf("Result is : %lu\n",a);
- return 0;
- }
上述接口还存在有待优化和完善的地方,例如是否可以支持形如"0x804Ed..."这样的十六进制串.在32为系统上,可以表示的最大无符号整形是232-1=4294967295,如果想表示更大的数可以用unsigned long long 型等等.
这个程序没有做过充分的测试,不足之处恳请各位予以指正,谢谢。
0
上一篇:寻访x86处理器“实模式”和“保护模式”的前世今生
下一篇:时针、分针和秒针是群快乐的好伙伴
相关热门文章
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
wjlkoorey2582013-04-10 22:14:00
Bean_lee:我记得有本书是专门讲这种技巧的。大神John Carmack当年也有很神奇的magic number的故事。
不过,我觉得如果这些工作应该交给编写底层库的人去做,如果我们每个人都要考虑这么多,就太累了。
我也是看源码时看到的,所以就记录下来了。因为自己以前写过这么一个接口,现在感觉那是相当的挫啊,呵呵
回复 | 举报Bean_lee2013-04-10 18:00:01
我记得有本书是专门讲这种技巧的。大神John Carmack当年也有很神奇的magic number的故事。
不过,我觉得如果这些工作应该交给编写底层库的人去做,如果我们每个人都要考虑这么多,就太累了。
回复 | 举报
评论热议
0 0
- 一个快速将十六进制串转十进制数的方法
- 一个快速将十六进制串转十进制数的方法
- 十六进制转换成十进制,将一个十六进制的数转换成一个整数
- 将十进制数对应的八进制、十六进制、十进制数输出
- 将十进制数对应的八进制、十六进制、十进制数输出
- 怎么将一个十六进制数转变成十进制数
- 怎么将一个十六进制数转变成十进制数
- 十六进制输入十进制输出的快速方法
- 十进制,八进制,十六进制数的表示方法
- 编写程序,将一个十进制正整数转换成十六进制数
- 十六进制数转十进制
- 快速实现二进制/八进制/十六进制/十进制数之间的转换
- 将十六进制数转换成十进制数
- 将十进制数转换为十六进制数
- 将十进制数转换为十六进制数
- 将十六进制数转换成十进制数
- 将十进制数转换为十六进制数
- 十进制数向十六进制数转换的三种方法
- 区别RDD、DataFrame和DataSet
- 戏说文件系统之ext3【上】
- CPU的内部架构和工作原理
- 寻访x86处理器“实模式”和“保护模式”的前世今生
- Rotating Scoreboard
- 一个快速将十六进制串转十进制数的方法
- 1096. Consecutive Factors (20)
- 时针、分针和秒针是群快乐的好伙伴
- 下班后...
- 实战X86寄存器
- CentOS6.3快速安装VLC小记
- Fedora 17下交叉编译vlc-2.0.6-win32小记
- 一堂课玩转rpm包的制作
- 仿乐透购彩app(3)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
三国志名将令2018平民红将阵容
陈情令结局将提前播出
陈情令将在netflix播出
netflix将播陈情令
率土之滨将令有什么用
率土之滨将令
2019年特赦令将释放多少人
将君令暗黑番外全第1卷
三国志名将令魏将组合阵容2018
没有人会心疼我蒙面唱将
将会
遇见你
2019水稻价格将会暴涨
2018年螺纹钢将会暴跌
干将发硎有作其芒什么意思
干将发硎有作其芒
干将发硎有作其芒意思
作始也简将毕也钜是什么意思
苦将侬强派作蛾眉
兵中绝将
兵来将挡
兵将卡牌系统
兵中绝将秦牧
强将手下无弱兵
兵熊熊一个将熊熊一窝
兵多将广
韩信将兵
兵来将迎
兵微将寡
什么兵什么将
损兵折将
强将帐下无弱兵
强将之下无弱兵
兵靠将带
兵离将败
强将手下无弱兵下一句
兵来将挡下一句
什么兵什么将成语
将源兵魂 骑都尉
勇兵神将 情满月出
强将手下无弱兵辩论赛