str转unsigned int
用法
- 1 参数:参数类型为char, 十六进制字符串形式:0X××××××[NUT],十进制字符串形式:×××××××[NUT],字符串的最大长度为16,字符串结尾符必须为ascii码值0(NUT)。
- 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的更多相关文章
- 深度解析C语言int与unsigned int
就如同int a:一样,int 也能被其它的修饰符修饰.除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种:1.signed----有符号,可修饰char.int.Int是 ...
- 坑!坑!坑!防不胜防的unsigned int的运算
我很早之前就知道,unsigned int与int运算的时候,int会被转化为unsigned int来进行运算.一直觉得定这条规则的人是极度反人类的,虽说unsigned int可以表示更大的正值, ...
- 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> # ...
- 数32位 unsigned int中1的个数
参考文章:http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 最简单的方法: int BitCount0(unsigned ...
- for( unsigned int i=heapSize/2-1; i>=0; --i)
unsigned int的表示 今天在写堆排序的时候遇到一个BUG void builMaxHeap( int *arr,unsigned int heapSize){ unsigned int i; ...
- C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)
强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...
- 嵌入式中的 *(volatile unsigned int *)0x500 解释
C语言中*(volatile unsigned int *)0x500的解释: 如下: (unsigned int *)0x500:将地址0x500强制转化为int型指针*(unsigned int ...
- 对unsigned int和int进行移位操作的区别
1. 无符号整数 unsigned int 对unsigned int进行移位操作时,最高位不会有任何特殊性. 无符号整数必须使用%u来打印 #include <stdio.h> int ...
- unsigned int 转 RGB
unsigned int颜色存储格式:0xaabbggrr,其中a,b,g,r分别表示,透明度.蓝色.绿色.红色. 方法一:使用windows宏 unsigned int clr = 0x00FF00 ...
随机推荐
- Fireeye火眼公司发布报告,评论中国网络间谍活动
2013年10月2日,Fireeye火眼公司发布报告,评论中国网络间谍活动-Fireeye(美 国火眼公司)发布报告<世界网络大战:理解网络攻击背后的国家意图>(World War C: ...
- IBatis.Net XML文件配置
一.添加Provider.config <?xml version="1.0" encoding="utf-8"?> <providers x ...
- windows 7 下找不到 Chart控件问题
1.网上下载 Microsoft Chart Control, version 6.0 插件 2.注册.由于windows 7 的权限问题注册会失败,因为注册控件需要管理员的权限,在开始菜单的附件下面 ...
- github的注册过程
带着疑问打开了github.这是一个神奇的网站,因为它到处都是英语,对于我这种英语盲这简直太痛苦了.借助了百度翻译,我还是马马虎虎的完成了github的制作. 首先在它的登录界面下面有一个sign u ...
- 系统不支持curl
解决安装pinphp时出现的“系统不支持curl!” 今天在本机安装phppin开源程序时,提示“系统不支持curl!”错误. 由于我本机是UBUNTU系统,所以直接通过apt-get进行安装. ...
- animate.css总结
本文对animate.css的各个效果进行总结 bounce 从上掉落,在地上小幅度跳起 <!DOCTYPE html> <meta charset="utf-8" ...
- js中的offsetWidth岁的BUG
---恢复内容开始--- 在js使用offsetWidth来操作控件的运动是会遇到: var oDiv = document.getElementById('div1') oDiv.style.wid ...
- Android Preference
http://blog.csdn.net/liuhe688/article/details/6448423 这个被google废弃了,替换方案是?
- WCF vs ASMX WebService
This question comes up a lot in conversations I have with developers. “Why would I want to switch to ...
- UE4 C++ 使用FTimeLine/FTime 实例 Actor moving faster than Timeline
https://answers.unrealengine.com/questions/313698/timeline-issues.html https://docs.unrealengine.c ...