C语言怎样把字符串转成十六进制

在做C语言中获取mac的程序,已经获取到了,不过是每一位都是字符数组的元素,
img
但是想把这个字符串转成表示十六进制的字符数组(就是上面两个字符和在一起,得到下面这种一个十六进制字符的形式)

img
代码或思路都可以,或者有什么相关的函数,请大家帮忙,谢谢!

#include<stdio.h>
#include<string.h>
int main()
{
    unsigned i,len;
    int n=0;
    char str[99]="123342abcdAFB1H",str1[99],str2[99]="  ";
    sscanf(str,"%[0-9^a-f^A-F]",str1);
    len=strlen(str1);
    while(strlen(str1)>1)
    {
        sscanf(str1,"%2s",str2);
        if(strlen(str1)!=len)printf(",");
        printf("0x%s",str2);
        n++;       
        for(i=0;i<strlen(str1)-2;i++)
        {
            str1[i]=str1[i+2];
        }
        str1[strlen(str1)-2]='\0';     
    }
    printf("\nn=%d\n",n);
    return 0;
}

或者

#include <stdio.h>
int IsHexChar(char ch)
{
if((ch>='0' && ch<='9') || (ch>='a' && ch<='f') ||(ch>='A' && ch<='F'))
return 1;
else
return 0;
}
unsigned char CharToValue(char c)
{
if(c>='0' && c<='9')
{
return c-'0';
}
if(c>='A' && c<='F')
{
return c-'A'+10;
}
if(c>='a' && c<='f')
{
return c-'a'+10;
}
}
unsigned char TwoCharToByte(char h,char l)
{
return (unsigned char)(CharToValue(h)*16 + CharToValue(l));
}
int main()
{
char str[1000] = "123342abcdAFB1H";
unsigned char data[100];
int cnt = 0;
int i;
printf("input str:\n");
//gets(str);
i = 0;
while(str[i]&&str[i+1])
{
if(IsHexChar(str[i]) && IsHexChar(str[i+1]))
{
data[cnt] = TwoCharToByte(str[i],str[i+1]);
cnt++;
//printf(cnt==1?"0x%c%c":", 0x%c%c", str[i], str[i+1]);
i++;
i++;
}
else
break;
}
for(i=0;i<cnt;i++)
{
printf(i==0?"%x":", %x", data[i]);
}
printf("\ncnt = %d\n", cnt);
return 0;
}

可以看看 将字符串转为16进制数_C语言中的进制互转与数值和字符串互转的混搭玩法_weixin_39816946的博客-CSDN博客 点击上方公众号名称关注,获得更多内容✎编 者 悟 语 很多事根本就没有那么多的前提可言,想做事,就不要把先决条件看得过重。文 章 导 读今天给小伙伴们介绍下了下进制转换和字符串与数值互转的方法,这在工程应用中是经常用到的,希望对小伙伴们有所帮助哈,!1用到的字符串与数值互转的库函数1)atoi字符转整数 intatoi(const char*nptr)... https://blog.csdn.net/weixin_39816946/article/details/112594864

#include <stdio.h>
#include <stdlib.h>

int main()
{
char c[6] = {0x00, 0x0c, 0x29, 0x73, 0x03, 0x4f};
int i;
for (i = 0; i < 6; ++i)
printf("%02x", c[i]);
printf("\n");
return 0;
}

#include <stdio.h>
int IsHexChar(char ch)
{
if((ch>='0' && ch<='9') || (ch>='a' && ch<='f') ||(ch>='A' && ch<='F'))
return 1;
else
return 0;
}
unsigned char CharToValue(char c)
{
if(c>='0' && c<='9')
{
return c-'0';
}
if(c>='A' && c<='F')
{
return c-'A'+10;
}
if(c>='a' && c<='f')
{
return c-'a'+10;
}
}
unsigned char TwoCharToByte(char h,char l)
{
return (unsigned char)(CharToValue(h)*16 + CharToValue(l));
}
int main()
{
char str[1000] = "123342abcdAFB1H";
unsigned char data[100];
int cnt = 0;
int i;
printf("input str:\n");
//gets(str);
i = 0;
while(str[i]&&str[i+1])
{
if(IsHexChar(str[i]) && IsHexChar(str[i+1]))
{
data[cnt] = TwoCharToByte(str[i],str[i+1]);
cnt++;
//printf(cnt==1?"0x%c%c":", 0x%c%c", str[i], str[i+1]);
i++;
i++;
}
else
break;
}
for(i=0;i<cnt;i++)
{
printf(i==0?"%x":", %x", data[i]);
}
printf("\ncnt = %d\n", cnt);
return 0;
}