一个快速将十六进制串转十进制数的方法
今天看到一段将十六进制数的字符转十进制的代码,写得太精妙了。我就又占了前辈们的光,在其基础上扩充了一下,写了个将十六进制字符串转十进制数的接口,和大家分享分享。
编译运行,其结果如下:
上述接口还存在有待优化和完善的地方,例如是否可以支持形如"0x804Ed..."这样的十六进制串.在32为系统上,可以表示的最大无符号整形是232-1=
4294967295,如果想表示更大的数可以用unsigned long long 型等等.
这个程序没有做过充分的测试,不足之处恳请各位予以指正,谢谢。
阅读(4122) | 评论(2) | 转发(7) |
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
点击(此处)折叠或打开
- /******************************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;
- }
![](/attachment/201304/10/23069658_13655243029EUn.jpg)
这个程序没有做过充分的测试,不足之处恳请各位予以指正,谢谢。
相关热门文章
给主人留下些什么吧!~~
wjlkoorey2582013-04-10 22:14:00
Bean_lee:我记得有本书是专门讲这种技巧的。大神John Carmack当年也有很神奇的magic number的故事。
不过,我觉得如果这些工作应该交给编写底层库的人去做,如果我们每个人都要考虑这么多,就太累了。
我也是看源码时看到的,所以就记录下来了。因为自己以前写过这么一个接口,现在感觉那是相当的挫啊,呵呵
回复 | 举报评论热议
posted on 2016-07-24 10:59 wjlkoorey258 阅读(487) 评论(0) 编辑 收藏 举报