小蚂蚁t 2021-08-21 18:33 采纳率: 54.5%
浏览 242
已结题

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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月23日
  • 已采纳回答 8月23日
  • 创建了问题 8月21日

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试