小蚂蚁t
2021-08-21 18:33
采纳率: 60%
浏览 122

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

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

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

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

4条回答 默认 最新

  • StjpStjp 2021-08-21 18:38
    最佳回答
    #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;
    }
    
    
    评论
    解决 1 无用
    打赏 举报
查看更多回答(3条)

相关推荐 更多相似问题