C语言:将16进制字符串转化为int类型值

简介: 将16进制字符串值转换为 int 整型值   此例中用 "1de" 作为测试字符串,实现代码如下:   [cpp] view plaincopy   #include    #include    #include    #include       /* ...

将16进制字符串值转换为 int 整型值

 

此例中用 "1de" 作为测试字符串,实现代码如下:

 

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4. #include <ctype.h>  
  5.   
  6. /* 
  7.  * 将字符转换为数值 
  8.  * */  
  9. int c2i(char ch)  
  10. {  
  11.         // 如果是数字,则用数字的ASCII码减去48, 如果ch = '2' ,则 '2' - 48 = 2  
  12.         if(isdigit(ch))  
  13.                 return ch - 48;  
  14.   
  15.         // 如果是字母,但不是A~F,a~f则返回  
  16.         if( ch < 'A' || (ch > 'F' && ch < 'a') || ch > 'z' )  
  17.                 return -1;  
  18.   
  19.         // 如果是大写字母,则用数字的ASCII码减去55, 如果ch = 'A' ,则 'A' - 55 = 10  
  20.         // 如果是小写字母,则用数字的ASCII码减去87, 如果ch = 'a' ,则 'a' - 87 = 10  
  21.         if(isalpha(ch))  
  22.                 return isupper(ch) ? ch - 55 : ch - 87;  
  23.   
  24.         return -1;  
  25. }  
  26.   
  27. /* 
  28.  * 功能:将十六进制字符串转换为整型(int)数值 
  29.  * */  
  30. int hex2dec(char *hex)  
  31. {  
  32.         int len;  
  33.         int num = 0;  
  34.         int temp;  
  35.         int bits;  
  36.         int i;  
  37.           
  38.         // 此例中 hex = "1de" 长度为3, hex是main函数传递的  
  39.         len = strlen(hex);  
  40.   
  41.         for (i=0, temp=0; i<len; i++, temp=0)  
  42.         {  
  43.                 // 第一次:i=0, *(hex + i) = *(hex + 0) = '1', 即temp = 1  
  44.                 // 第二次:i=1, *(hex + i) = *(hex + 1) = 'd', 即temp = 13  
  45.                 // 第三次:i=2, *(hex + i) = *(hex + 2) = 'd', 即temp = 14  
  46.                 temp = c2i( *(hex + i) );  
  47.                 // 总共3位,一个16进制位用 4 bit保存  
  48.                 // 第一次:'1'为最高位,所以temp左移 (len - i -1) * 4 = 2 * 4 = 8 位  
  49.                 // 第二次:'d'为次高位,所以temp左移 (len - i -1) * 4 = 1 * 4 = 4 位  
  50.                 // 第三次:'e'为最低位,所以temp左移 (len - i -1) * 4 = 0 * 4 = 0 位  
  51.                 bits = (len - i - 1) * 4;  
  52.                 temp = temp << bits;  
  53.   
  54.                 // 此处也可以用 num += temp;进行累加  
  55.                 num = num | temp;  
  56.         }  
  57.   
  58.         // 返回结果  
  59.         return num;  
  60. }  
  61.   
  62.   
  63. int main(int argc, char *argv[])  
  64. {  
  65.         char ch[10] = {0};  
  66.         strcpy(ch, "1de");  
  67.         printf("hex:%d\n", hex2dec(ch));  
  68.         return 0;  
  69. }  



 

 


本人在CentOS 6.5下测试

编译:gcc -Wall test.c -ohex

运行:./hex

输出:hex:478

目录
相关文章
|
2月前
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。
|
2月前
|
Python
[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助
本文回顾了Python中`ord()`和`chr()`函数的使用方法,强调了这两个函数互为逆运算:`ord()`通过字符找到对应的序号,`chr()`则通过序号找到对应的字符。文章详细解释了函数参数类型的重要性,即`ord()`需要字符串类型参数,而`chr()`需要整数类型参数。若参数类型错误,则会引发`TypeError`。此外,还介绍了如何使用`type()`函数查询参数类型,并通过示例展示了如何正确使用`ord()`和`chr()`进行转换。最后,强调了在函数调用时正确传递参数类型的重要性。
23 3
|
2月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
2月前
|
C语言 C++
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
|
2月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
164 1
|
3月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
3月前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
162 7
|
4月前
|
Java
【Java基础面试五】、 int类型的数据范围是多少?
这篇文章回答了Java中`int`类型数据的范围是-2^31到2^31-1,并提供了其他基本数据类型的内存占用和数值范围信息。
【Java基础面试五】、 int类型的数据范围是多少?
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
3月前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。