C语言:将16进制字符串转化为int类型值
2014-09-26 15:49
387 查看
将16进制字符串值转换为 int 整型值
此例中用 "1de" 作为测试字符串,实现代码如下:
[cpp] view plaincopy
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/*
* 将字符转换为数值
* */
int c2i(char ch)
{
// 如果是数字,则用数字的ASCII码减去48, 如果ch = '2' ,则 '2' - 48 = 2
if(isdigit(ch))
return ch - 48;
// 如果是字母,但不是A~F,a~f则返回
if( ch < 'A' || (ch > 'F' && ch < 'a') || ch > 'z' )
return -1;
// 如果是大写字母,则用数字的ASCII码减去55, 如果ch = 'A' ,则 'A' - 55 = 10
// 如果是小写字母,则用数字的ASCII码减去87, 如果ch = 'a' ,则 'a' - 87 = 10
if(isalpha(ch))
return isupper(ch) ? ch - 55 : ch - 87;
return -1;
}
/*
* 功能:将十六进制字符串转换为整型(int)数值
* */
int hex2dec(char *hex)
{
int len;
int num = 0;
int temp;
int bits;
int i;
// 此例中 hex = "1de" 长度为3, hex是main函数传递的
len = strlen(hex);
for (i=0, temp=0; i<len; i++, temp=0)
{
// 第一次:i=0, *(hex + i) = *(hex + 0) = '1', 即temp = 1
// 第二次:i=1, *(hex + i) = *(hex + 1) = 'd', 即temp = 13
// 第三次:i=2, *(hex + i) = *(hex + 2) = 'd', 即temp = 14
temp = c2i( *(hex + i) );
// 总共3位,一个16进制位用 4 bit保存
// 第一次:'1'为最高位,所以temp左移 (len - i -1) * 4 = 2 * 4 = 8 位
// 第二次:'d'为次高位,所以temp左移 (len - i -1) * 4 = 1 * 4 = 4 位
// 第三次:'e'为最低位,所以temp左移 (len - i -1) * 4 = 0 * 4 = 0 位
bits = (len - i - 1) * 4;
temp = temp << bits;
// 此处也可以用 num += temp;进行累加
num = num | temp;
}
// 返回结果
return num;
}
int main(int argc, char *argv[])
{
char ch[10] = {0};
strcpy(ch, "1de");
printf("hex:%d\n", hex2dec(ch));
return 0;
}
本人在CentOS 6.5下测试
编译:gcc -Wall test.c -ohex
运行:./hex
输出:hex:478
此例中用 "1de" 作为测试字符串,实现代码如下:
[cpp] view plaincopy
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/*
* 将字符转换为数值
* */
int c2i(char ch)
{
// 如果是数字,则用数字的ASCII码减去48, 如果ch = '2' ,则 '2' - 48 = 2
if(isdigit(ch))
return ch - 48;
// 如果是字母,但不是A~F,a~f则返回
if( ch < 'A' || (ch > 'F' && ch < 'a') || ch > 'z' )
return -1;
// 如果是大写字母,则用数字的ASCII码减去55, 如果ch = 'A' ,则 'A' - 55 = 10
// 如果是小写字母,则用数字的ASCII码减去87, 如果ch = 'a' ,则 'a' - 87 = 10
if(isalpha(ch))
return isupper(ch) ? ch - 55 : ch - 87;
return -1;
}
/*
* 功能:将十六进制字符串转换为整型(int)数值
* */
int hex2dec(char *hex)
{
int len;
int num = 0;
int temp;
int bits;
int i;
// 此例中 hex = "1de" 长度为3, hex是main函数传递的
len = strlen(hex);
for (i=0, temp=0; i<len; i++, temp=0)
{
// 第一次:i=0, *(hex + i) = *(hex + 0) = '1', 即temp = 1
// 第二次:i=1, *(hex + i) = *(hex + 1) = 'd', 即temp = 13
// 第三次:i=2, *(hex + i) = *(hex + 2) = 'd', 即temp = 14
temp = c2i( *(hex + i) );
// 总共3位,一个16进制位用 4 bit保存
// 第一次:'1'为最高位,所以temp左移 (len - i -1) * 4 = 2 * 4 = 8 位
// 第二次:'d'为次高位,所以temp左移 (len - i -1) * 4 = 1 * 4 = 4 位
// 第三次:'e'为最低位,所以temp左移 (len - i -1) * 4 = 0 * 4 = 0 位
bits = (len - i - 1) * 4;
temp = temp << bits;
// 此处也可以用 num += temp;进行累加
num = num | temp;
}
// 返回结果
return num;
}
int main(int argc, char *argv[])
{
char ch[10] = {0};
strcpy(ch, "1de");
printf("hex:%d\n", hex2dec(ch));
return 0;
}
本人在CentOS 6.5下测试
编译:gcc -Wall test.c -ohex
运行:./hex
输出:hex:478
相关文章推荐
- C语言:将16进制字符串转化为int类型值
- C语言:将16进制字符串转化为int类型值
- 16进制字符串转化成int类型
- 用C语言实现将int类型转化为字符串,不使用已有的转换函数
- 将一个int类型的数字转化为字符串,并判断有无重复字符串(长度应大于等于2)有返回1,无返回0
- 【数据采集】将16进制字符串转化为Double类型输出(依照IEEE754标准)
- 杂篇之1-字符串与int类型的相互转化
- android典型代码系列(十八)------把java中的jstring的类型转化成一个c语言中的char字符串
- 面试题: 十进制INT数字转化为16进制字符串、实现字符串和数字的相互转化
- 初始加载时把字符串,也就是""转化为int类型
- 【C编程练习】2013华为校园招聘机试题目题5:将一个int类型的数字转化为字符串,并判断有无重复字符串(长度应大于2)有返回1,无返回2
- C语言中的类型转换——将字符串s转换为整数型(int)类型
- LeetCode—实现字符串转化为int类型的函数
- stringstream流格式化符,把int转化为string,string又可以转为C语言风格的字符串
- 将request.getParameter("supplyId")获得的字符串转化成int类型
- 由object转化为Int类型时,字符串做为中间转化量是有区别的
- IEEE 16进制字符串转化为double类型
- java &安卓 16进制字符串与byte互换以及int与byte类型数据转换
- 16进制编码与字符串的互相转化
- 时间字符串和date类型转化为时间字符串比较