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

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 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳