c语⾔16进制字符串转字节数组今天看代码看到两种16进制字符串转字节数组的⽅法,现贴出来相当于做个笔记了。
第⼀种:
1 #include<string.h>
2 #include<stdio.h>
3
4void hex_str_to_byte(char*hex_str,int length,unsigned char*result)
5{
6char h, l;
7for(int i =0; i < length/2; i++)
8{
9if(*hex_str <58)
10{
11            h =*hex_str -48;
12}
13else if(*hex_str <71)
14{
15            h =*hex_str -55;
16}
17else
18{
19            h =*hex_str -87;
20}
21        hex_str++;
22if(*hex_str <58)
23{
24            l =*hex_str -48;
25}
26else if(*hex_str <71)
27{
28            l =*hex_str -55;
29}
30else
31{
32            l =*hex_str -87;
33}
34        hex_str++;
35*result++= h<<4|l;
36}
37}
38
39int main()
40{
41char*str ="AB32333435363738393a3b3c3d3e3f40";
42unsigned char temp[16]={0};
43hex_str_to_byte(str,strlen("AB32333435363738393a3b3c3d3e3f40"), temp);
44for(int i =0; i <16; i++)
45{
46printf("%x ", temp[i]);
47}
48printf("\n");
49return0;
50}
第⼆种:
36 #include<stdlib.h>
37 #include<string.h>
38 #include<stdio.h>
39void hex_str_to_byte(char*in,int len,unsigned char*out)
40{
41char*str =(char*)malloc(len);
42memset(str,0, len);
43memcpy(str, in, len);
44for(int i =0; i < len; i+=2)
45{
46//⼩写转⼤写
47if(str[i]>='a'&& str[i]<='f') str[i]= str[i]-0x20;
48if(str[i+1]>='a'&& str[i]<='f') str[i+1]= str[i+1]-0x20;
49//处理第前4位
50if(str[i]>='A'&& str[i]<='F')
51            out[i/2]=(str[i]-'A'+10)<<4;
52else
53            out[i/2]=(str[i]&~0x30)<<4;
54//处理后4位, 并组合起来
55if(str[i+1]>='A'&& str[i+1]<='F')
56            out[i/2]|=(str[i+1]-'A'+10);
57else
58            out[i/2]|=(str[i+1]&~0x30);
59}
60free(str);
61}
62
63int main()
64{
65char*str ="AB32333435363738393a3b3c3d3e3f40";
66unsigned char temp[16]={0};
67hex_str_to_byte(str,strlen("AB32333435363738393a3b3c3d3e3f40"), temp); 68for(int i =0; i <16; i++)
69{
70printf("%x ", temp[i]);
71}
72printf("\n");
73return0;
c语言如何创建字符串数组
74}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。