用法

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

原理

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

代码

unsigned int str2uint(char *str)
{
/* max 32bit integer is 4294967296, buf[16] is enough */
char buf[16];
int i;
int num;
int base = 10;
int ret_val;
if (NULL == str)
return 0; i = 0;
while (i<16) {
/* Format it */
if ((str[i] == 'X') || (str[i] == 'x')) {
buf[i] = 'x';
if (i != 1)
return 0; /* not 0[x]XXXXXXXX */
else if (buf[0] != '0')
return 0; /* not [0]xXXXXXXXX */
else
base = 16;
} else if ((str[i] >= '0') && (str[i] <= '9'))
buf[i] = str[i];
else if ((str[i] >= 'a') && (str[i] <= 'f')) {
if (base != 16)
return 0;
buf[i] = str[i];
} else if ((str[i] >= 'A') && (str[i] <= 'F')) {
if (base != 16)
return 0;
buf[i] = str[i] - 'A' + 'a';
} else if (str[i] == 0) {
buf[i] = 0;
i++;
break;
} else
return 0; i++;
} num = i-1;
ret_val = 0;
if (base == 10) {
for (i=0; i<num; i++)
ret_val = ret_val*10 + buf[i] - '0';
} else if (base == 16) {
for (i=2; i<num; i++) {
if (buf[i] >= 'a')
ret_val = ret_val*16 + buf[i] - 'a' + 10;
else
ret_val = ret_val*16 + buf[i] - '0';
}
}
return ret_val;
}

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. 移动 Web 开发技巧之(后续)

    昨天的<移动 Web 开发技巧>的这篇文章,大家反响不错,因为这些问题在大家日常写移动端的页面时经常遇到的.所以那个文章还是超级实用的,那么我们今天继续来分享一下移动端的web开发技巧吧, ...

  2. K2 BPM打造企业新门户,步入移动办公时代

    公司介绍步步高教育电子有限公司(前身为步步高电脑电玩厂)是广东步步高电子工业有限公司属下的三个分公司之一,一直致力于面向广大学生的教育电子产品的研发与生产,主要产品有视频学习机.点读机.学生电脑.语言 ...

  3. css盒子模型层级3D图

    作为前端开发工程师,大家都应该知道盒子模型.下面用一张图来表达3D盒子模型的层级关系 大家可以看到background-color 在background-image的下一层.这个希望对大家有帮助

  4. JS实现表格的增删改

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/T ...

  5. Ubuntu下部分文件操作的命令

    (1)创建目录 mkdir filefoldname (2)删除空目录 rmdir filefoldname (3)删除非空目录及其中所有文件 rm -rf filefoldname (4)移动文件或 ...

  6. R on Ubuntu

    I have been using R recently. R is statistics programming language. R has attracted more and more at ...

  7. ViewHolder简洁写法

    ViewHolder holder = null;         if(convertView == null){                 convertView = mInflater.i ...

  8. Redis持久化-数据丢失及解决(转载)

    本文转载自        Redis持久化-数据丢失及解决  感谢原作者 Redis的数据回写机制 Redis的数据回写机制分同步和异步两种, 同步回写即SAVE命令,主进程直接向磁盘回写数据.在数据 ...

  9. HDU 5358 尺取法+枚举

    题意:给一个数列,按如下公式求和. 分析:场上做的时候,傻傻以为是线段树,也没想出题者为啥出log2,就是S(i,j) 的二进制表示的位数.只能说我做题依旧太死板,让求和就按规矩求和,多考虑一下就能发 ...

  10. Caffe 源碼閱讀(二) SyncedMemory.hpp

    1. to_cpu 數據由現存同步到內存 2. to_gpu 數據由內存同步到顯存 3. cpu_str_ 內存指針 4. gpu_str_ 顯存指針 5. size_ 數據大小 6. own_cpu ...