三日一练-C语言百题(006)

发布时间 2023-04-10 23:43:33作者: 孔实

进制转换:16进制转10进制

 1 //2018 0306 
 2 C语言 十六进制字符串转十进制
 3 需求:比如我有一个字符串,定义为char * a=“2B4AFF8071”,里面是十六进制表示,
 4 我要每次依次取其中两位比如 2B,转换成十进制“43”,然后再存入另一个字符串char *b或
 5 字符数组char b[],接着取4A,依次循环完,请问要怎么写。
 6 
 7 #include <stdio.h>
 8 #include <string.h>
 9 void main()
10 {
11    int i=0,j=0,result=0,index=0,cindex=0;
12    char a[100],b[100],c[4];
13    gets(a);//输入数据 
14     
15    for(i=0 ; i<strlen(a); i++)
16    {
17            /*将16进制转换成10进制*/
18            if(a[i]>='a' && a[i]<='z')
19                         result = result*16 + a[i]-'a'+10;   //疑问? a< a[i] <z 它是如何比较的?
20             else if(a[i]>='A' && a[i]<='Z')
21                         result = result*16 + a[i]-'A'+10;
22            else
23                         result = result*16 + a[i]-'0';
24            /*每两位处理一次*/
25            if(i%2!=0)
26            {
27                      cindex = 0;
28                      do
29                      {
30                                c[cindex++] = result%10 + '0';//倒序存放在c中 
31                                result/=10;
32                      }while(result!=0);
33                      for(j=cindex-1; j>=0; j--)//翻转后存放在b中 
34                                      b[index++] = c[j];
35            }
36    } 
37    b[index] = '\0';//加上串结束符 
38    puts(b);//输出 
39 }

 

 你好,请问2B4AFF8071这个字符串可否直接写死在定义中,
42 是否可以这样char a[10]={'2','B','4','A','F','F','8','0','7','1'};???
43 追答
44 char a[100]="2B4AFF8071",b[100],c[4];
45    //gets(a);//输入数据
46 这样就可以了
47         /****************************************************/
48 
49     答疑::
50         //疑问? a< a[i] <z 它是如何比较的?
51     /*
52     它们是对字母的ASCII码进行比较,累加,把它们都当作一个字符。    
53     c语言 搜索ASCII码中,A~Z:65-90, a~z:97-122(分别一一对应)。
54 ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)
55 是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,
56 并等同于国际标准ISO/IEC 646。ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
57 标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号,
58  以及在美式英语中使用的特殊控制字符。
59     */