用法

  1. 1 参数:参数类型为char, 十六进制字符串形式:0X××××××[NUT],十进制字符串形式:×××××××[NUT],字符串的最大长度为16,字符串结尾符必须为ascii码值0(NUT)。
  2. 2 返回值:返回值类型为unsigned int

原理

以传入的参数str的前两个字符判断str是表示十进制还是十六进制,然后依据数制判断后面的字符是否合法,如果不合法直接返回,否则将其复制到buf中,最后依据数制计算出数值。

代码

  1. unsigned int str2uint(char *str)
  2. {
  3. /* max 32bit integer is 4294967296, buf[16] is enough */
  4. char buf[16];
  5. int i;
  6. int num;
  7. int base = 10;
  8. int ret_val;
  9. if (NULL == str)
  10. return 0;
  11. i = 0;
  12. while (i<16) {
  13. /* Format it */
  14. if ((str[i] == 'X') || (str[i] == 'x')) {
  15. buf[i] = 'x';
  16. if (i != 1)
  17. return 0; /* not 0[x]XXXXXXXX */
  18. else if (buf[0] != '0')
  19. return 0; /* not [0]xXXXXXXXX */
  20. else
  21. base = 16;
  22. } else if ((str[i] >= '0') && (str[i] <= '9'))
  23. buf[i] = str[i];
  24. else if ((str[i] >= 'a') && (str[i] <= 'f')) {
  25. if (base != 16)
  26. return 0;
  27. buf[i] = str[i];
  28. } else if ((str[i] >= 'A') && (str[i] <= 'F')) {
  29. if (base != 16)
  30. return 0;
  31. buf[i] = str[i] - 'A' + 'a';
  32. } else if (str[i] == 0) {
  33. buf[i] = 0;
  34. i++;
  35. break;
  36. } else
  37. return 0;
  38. i++;
  39. }
  40. num = i-1;
  41. ret_val = 0;
  42. if (base == 10) {
  43. for (i=0; i<num; i++)
  44. ret_val = ret_val*10 + buf[i] - '0';
  45. } else if (base == 16) {
  46. for (i=2; i<num; i++) {
  47. if (buf[i] >= 'a')
  48. ret_val = ret_val*16 + buf[i] - 'a' + 10;
  49. else
  50. ret_val = ret_val*16 + buf[i] - '0';
  51. }
  52. }
  53. return ret_val;
  54. }

str转unsigned int的更多相关文章

  1. 深度解析C语言int与unsigned int

    就如同int a:一样,int 也能被其它的修饰符修饰.除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种:1.signed----有符号,可修饰char.int.Int是 ...

  2. 坑!坑!坑!防不胜防的unsigned int的运算

    我很早之前就知道,unsigned int与int运算的时候,int会被转化为unsigned int来进行运算.一直觉得定这条规则的人是极度反人类的,虽说unsigned int可以表示更大的正值, ...

  3. Ubuntu gcc编译报错:format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘__time_t’ [-Wformat=]

    平时用的都是Centos系统,今天偶然在Ubuntu下编译了一次代码,发现报错了: 源码: #include <stdio.h> #include <sys/time.h> # ...

  4. 数32位 unsigned int中1的个数

    参考文章:http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 最简单的方法: int BitCount0(unsigned ...

  5. for( unsigned int i=heapSize/2-1; i>=0; --i)

    unsigned int的表示 今天在写堆排序的时候遇到一个BUG void builMaxHeap( int *arr,unsigned int heapSize){ unsigned int i; ...

  6. C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)

    强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...

  7. 嵌入式中的 *(volatile unsigned int *)0x500 解释

    C语言中*(volatile unsigned int *)0x500的解释: 如下: (unsigned int *)0x500:将地址0x500强制转化为int型指针*(unsigned int ...

  8. 对unsigned int和int进行移位操作的区别

    1. 无符号整数 unsigned int 对unsigned int进行移位操作时,最高位不会有任何特殊性. 无符号整数必须使用%u来打印 #include <stdio.h> int ...

  9. unsigned int 转 RGB

    unsigned int颜色存储格式:0xaabbggrr,其中a,b,g,r分别表示,透明度.蓝色.绿色.红色. 方法一:使用windows宏 unsigned int clr = 0x00FF00 ...

随机推荐

  1. Fireeye火眼公司发布报告,评论中国网络间谍活动

    2013年10月2日,Fireeye火眼公司发布报告,评论中国网络间谍活动-Fireeye(美 国火眼公司)发布报告<世界网络大战:理解网络攻击背后的国家意图>(World War C: ...

  2. IBatis.Net XML文件配置

    一.添加Provider.config <?xml version="1.0" encoding="utf-8"?> <providers x ...

  3. windows 7 下找不到 Chart控件问题

    1.网上下载 Microsoft Chart Control, version 6.0 插件 2.注册.由于windows 7 的权限问题注册会失败,因为注册控件需要管理员的权限,在开始菜单的附件下面 ...

  4. github的注册过程

    带着疑问打开了github.这是一个神奇的网站,因为它到处都是英语,对于我这种英语盲这简直太痛苦了.借助了百度翻译,我还是马马虎虎的完成了github的制作. 首先在它的登录界面下面有一个sign u ...

  5. 系统不支持curl

    解决安装pinphp时出现的“系统不支持curl!”   今天在本机安装phppin开源程序时,提示“系统不支持curl!”错误. 由于我本机是UBUNTU系统,所以直接通过apt-get进行安装. ...

  6. animate.css总结

    本文对animate.css的各个效果进行总结 bounce 从上掉落,在地上小幅度跳起 <!DOCTYPE html> <meta charset="utf-8" ...

  7. js中的offsetWidth岁的BUG

    ---恢复内容开始--- 在js使用offsetWidth来操作控件的运动是会遇到: var oDiv = document.getElementById('div1') oDiv.style.wid ...

  8. Android Preference

    http://blog.csdn.net/liuhe688/article/details/6448423 这个被google废弃了,替换方案是?

  9. WCF vs ASMX WebService

    This question comes up a lot in conversations I have with developers. “Why would I want to switch to ...

  10. UE4 C++ 使用FTimeLine/FTime 实例 Actor moving faster than Timeline

    https://answers.unrealengine.com/questions/313698/timeline-issues.html   https://docs.unrealengine.c ...