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

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

 

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

 

[cpp] view plaincopy

 

  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

时间: 2024-09-19 09:38:33

C语言:将16进制字符串转化为int类型值的相关文章

c语言-如何将数字字符串转为16进制字符串?

问题描述 如何将数字字符串转为16进制字符串? 请教一个示例:如何将数字字符串转为16进制字符串?字符串:char str[20]="1234567890123456";将中间的"789012"转换为16进制的"0C0A14":最后str=""1234560C0A143456"" 如果有描述不清的地方,请指出.多谢! 解决方案 你先用字符串截取到 比如strstr等,""789012&q

ios-IOS 如何把16进制字符串转换成byte 求各位大神 最好能有代码

问题描述 IOS 如何把16进制字符串转换成byte 求各位大神 最好能有代码 IOS 如何把16进制字符串转换成byte?求各位大神 最好能有代码 解决方案 字符串由字符组成,每个字符都占用一定的字节,我记得是4还是多少,这是c语言底层的算法,应该还有其他算法

16进制字符串转数字(C/C++,VB/VB.net,C#)

这个问题看是很简单,但是在不同语言中实现的方式却千差万别,如果不知道方法,还真是麻烦,我就是在C#中遇到该问题,让我费了很大的周折,才在msdn查到. 一.16进制字符串转数字      1.C/C++            I.最简单的办法:sscanf("12AB",,"%x",&lngHex);   //字符也可以为"0x12AB"       II.有个朋友,自行编写函数实现了该功能,据说速度比sscanf快:       BOO

java-两个很长的16进制字符串怎么进行异或运算?

问题描述 两个很长的16进制字符串怎么进行异或运算? str1=""0d1fe39e573488cf"" str2=""0d1fe39e573488ee595acd5c6d4ce0f445476794"" 怎不进行异或运算? 由于太长不能转化成long 解决方案 每2个一组,存入数组,然后循环异或. 解决方案二: byte[] array1 = str1.getBte();byte[] array2 = str2.getByt

vb 串口发送16进制-Vb将文本框里输入的十进制数据按chr(13)分割,然后转换成&amp;amp;amp;h+16进制字符串形式

问题描述 Vb将文本框里输入的十进制数据按chr(13)分割,然后转换成&h+16进制字符串形式 例如文本框里输入253chr(13)255chr(13),要求输出结果书"&HFD" "&HFF",看了好多算法,但是还是没有研究出来. 我自己做的结果如下 Private Sub Text2_KeyPress(KeyAscii As Integer) Dim tmp() As String Dim aa As String * 1 Dim rd

给串口发送16进制字符串命令和包括16进制命令转换为字节数组

using System;using System.Collections.Generic;using System.Text;using System.IO.Ports;namespace SerialPortControl{    public class PortControl    {         /// <summary>        /// 向端口中发送命令.        /// </summary>        /// <param name=&quo

关于byte 进制 float String 编码 16进制字符串转16进制byte的问题

首先 只有String才与编码有关: byte与其他类型转换时,要注意大端点还是小端点, 编码: Ascii Unicode gbk utf-8等等  byte 占 8位 可由两个16进制数(0xff)组成,一个16进制占4位,也可由8位二进制数组成等等,与编码没关系,但可用2进制表示,也可由其他进制表示. "0xff"这样的16进制字符串转换成16进制byte String[] s="0X0C 0X03 0X00 0X04 0X00 0X02 0X84 0XD7"

php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串_php技巧

数据库脚本: -- -------------------------------------------------------- -- -- 表的结构 `highot_attachment` -- 复制代码 代码如下: CREATE TABLE IF NOT EXISTS `highot_attachment` ( `id` int(11) NOT NULL auto_increment, `phone_number_id` int(11) NOT NULL COMMENT 'phone_n

16进制字符串-C# 16进制的字符串转byte数组

问题描述 C# 16进制的字符串转byte数组 如字符串:0xFF 0x01 0x01 0x02 0xEE 转换成byte byte[0]=0xFF; byte[1]=0x01