C/C++下将一个十六进制的字符串型的数字转换成整型数字.
2010-04-09 17:43
459 查看
把一个数字转换成16进制数字表示的字符串,我们可以调用sprintf,但是C的标准库里面并没有提供对应的将一个十六进制的字符串型的数字转换成整型数字的函数.我写了一个可以实现功能的并尽量使其优化.(目前此函数只支持32位)
/* input hex string, format: 0xAA111 or AA111 or abc11 */
int ahextoi(char* p)
{
int n = 0;
char* q = p;
/* reach its tail */
while(*q)
q++;
if(*p == '0' && *(p + 1) != 0)
/* skip "0x" or "0X" */
p += 2;
while(*p)
{
int c;
if(*p >= '0' && *p <= '9')
c = *p - '0';
else if(*p >= 'A' && *p <= 'F')
c = *p - 'A' + 0xA;
else if(*p >= 'a' && *p <= 'f')
c = *p - 'a' + 0xA;
else
/* invalid char */
return 0;
n += c << ((int)(q - p - 1) * 4);
p++;
}
return n;
}
可以用如下代码进行测试:
int main(int argc, char* argv[])
{
int out = 0;
out = ahextoi("");
printf("%#010X/n", out);
out = ahextoi("0x123");
printf("%#010X/n", out);
out = ahextoi("123abc");
printf("%#010X/n", out);
out = ahextoi("ABC123");
printf("%#010X/n", out);
out = ahextoi("0XAc1b1c");
printf("%#010X/n", out);
return 0;
}
/* input hex string, format: 0xAA111 or AA111 or abc11 */
int ahextoi(char* p)
{
int n = 0;
char* q = p;
/* reach its tail */
while(*q)
q++;
if(*p == '0' && *(p + 1) != 0)
/* skip "0x" or "0X" */
p += 2;
while(*p)
{
int c;
if(*p >= '0' && *p <= '9')
c = *p - '0';
else if(*p >= 'A' && *p <= 'F')
c = *p - 'A' + 0xA;
else if(*p >= 'a' && *p <= 'f')
c = *p - 'a' + 0xA;
else
/* invalid char */
return 0;
n += c << ((int)(q - p - 1) * 4);
p++;
}
return n;
}
可以用如下代码进行测试:
int main(int argc, char* argv[])
{
int out = 0;
out = ahextoi("");
printf("%#010X/n", out);
out = ahextoi("0x123");
printf("%#010X/n", out);
out = ahextoi("123abc");
printf("%#010X/n", out);
out = ahextoi("ABC123");
printf("%#010X/n", out);
out = ahextoi("0XAc1b1c");
printf("%#010X/n", out);
return 0;
}
相关文章推荐
- C/C++-将一个十六进制的字符串型的数字转换成整型数字.
- 将一个十六进制的字符串型的数字转换成整型数字的函数(目前此函数只支持32位)
- c/c++ 字符转换为数字
- Sql将一个整型数字转换成带前导零的固定长度数字字符串
- 递归的应用——输入一个整型值(无符号),把它转换成字符并打印它,前导0被删除
- 练习 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f 以及 A~F。
- 将数字转换为对应的字符 c++
- c++中怎样把字符转换为整型
- javascript十六进制数字和ASCII字符之间的转换方法
- 十六进制的数字字符和十六进制数之间的转换
- 字符串数字转换为整型数字,考虑正负号,溢出,非法字符
- 如何把字符串型数据转换为整型
- 字节数组 整型 字符串 十六进制 字符 之间的转换
- 字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理
- Qt(C++)将字符串输入框中的数字字符串转换成十六进制命令的方法。
- 【c语言】为下面的函数原型编写函数定义,这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
- 把一个“十六进制”字符串转换为十六进制数字输出
- C++中数字与字符串之间的转换(包括C++11新标准和宽窄字符转换)
- javascript十六进制数字和ASCII字符之间转换
- 写一个方法完成如下功能,判断从文本框textbox1输入的一个字符,如果是数字则求该数字的阶乘,如果是小写字条,则转换为大写,大写字符不变,结果在文本框textbox2中显示