whh20201024 2020-11-14 16:18 采纳率: 100%
浏览 132
已结题

c语言如何用指针将十六进制字符串转换成二进制字符串?

c语言如何用指针将十六进制字符串转换成二进制字符串?

  • 写回答

1条回答 默认 最新

  • 神仙404 2020-11-14 18:14
    关注
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #include <ctype.h>
    
    char x[17][5] =
    {
      "0000", "0001", "0010", "0011",
      "0100", "0101", "0110", "0111",
      "1000", "1001", "1010", "1011",
      "1100", "1101", "1110", "1111",
    };
    
    int index_of_x(char c) {
      if (isdigit(c)) {
        return c - '0';
      } else if (isalpha(c)) {
        c = tolower(c);
        return (c - 'a') + 10;
      }
    }
    
    char* hex_to_bin(const char *hex_str) {
      int len = strlen(hex_str);
      char *bin_str = (char*)malloc(len * 4 + 1);
      const char *p = hex_str;
      char *q = bin_str;
      while (*p != '\0') {
        int idx = index_of_x(*p);
        memmove(q, x[idx], strlen(x[idx]));
        q += 4;
        p++;
      }
      *q = '\0';
      return bin_str;
    }
    
    int main() {
      const char hex_str[] = "ab14cb";
      char *dest = hex_to_bin(hex_str);
      printf("bin_str: %s\n", dest);
      free(dest);
      return 0;
    }

    抛砖引玉, 多多交流。

    1 个 16 进制数对应 4 位二进制,把握住这点就可以了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月8日
  • 已采纳回答 5月31日

悬赏问题

  • ¥15 luckysheet
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误