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 ...
随机推荐
- Ruby学习笔记
#!/usr/bin/ruby puts "Hello, Ruby, what is your name?" $name = STDIN.gets puts "Hi, I ...
- 【个人使用.Net类库】(4)验证码类
验证码是现在管理系统常用的一种保护用户帐户信息的一种功能. 验证码可以有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,虽然这可能是我们登录麻烦一点,但是对用户的密码安全来 ...
- android使用html+javascript来制作页面
一般的android界面使用的是XML.但是XML如果要制作很高级的UI,会很复杂.如果使用HTML老进行UI设计就会简单很多. android早就提供了这样的借口. WebView.addJavas ...
- 编程技术●Python
<Python语言入门> 2015-01-16 14:13 ★ 虽然书名叫入门.序里也写了说完全没有编程经验的都可以用这本书来学习入门.不过好像不太适合哦.书很好,内容也挺全面细致的.太好 ...
- Dooioo Deal
using AnfleCrawler.Common; using System; using System.Collections.Generic; using System.Linq; using ...
- JVM-class文件完全解析-属性表集合
属性表集合 在前面魔数,次版本号,主板本号,常量池入口,常量池,访问标志,类索引,父类索引,接口索引集合,字段表集合,方法表集合,那么接下来就是属性表集合了. 在class文件,字段表,方法表都可 ...
- Wireshark找不到网络接口问题
Wireshark找不到网络接口问题 在运行Wireshark工具抓包时,需要有管理员用户权限.如果是普通用户启动的话,将会提示找不到网络接口.
- jQuery 中 offset()方法与用position()的区别
jq中offset().left和offset().top获取的是相对于整个文档左上角的偏移. 而用$(selector).position().left和.top 取到的则是相对于selector父 ...
- Why one-norm is an agreeable alternative for zero-norm?
[转载请注明出处]http://www.cnblogs.com/mashiqi Today I try to give a brief inspection on why we always choo ...
- Python 基礎 - 用戶交互程序
現在就來寫一個簡單的 用戶輸入 的程式,這是一個互動模式,需要使用者自已輸入 #!/usr/bin/env python3 # -*- coding:utf-8 -*- username = inpu ...