【问题标题】:How do I convert a binary string to hex using C?如何使用 C 将二进制字符串转换为十六进制?
【发布时间】:2011-07-15 12:37:33
【问题描述】:

如何使用 C 将 8 位二进制字符串(例如“10010011”)转换为十六进制?

【问题讨论】:

标签: c binary hex


【解决方案1】:
#include <stdlib.h>

strtol("10010011", NULL, 2);

【讨论】:

    【解决方案2】:

    类似的东西:

    char *bin="10010011";
    char *a = bin;
    int num = 0;
    do {
        int b = *a=='1'?1:0;
        num = (num<<1)|b;
        a++;
    } while (*a);
    printf("%X\n", num);
    

    【讨论】:

    • 效果很好!但是,我需要将其作为无符号字符值返回......当我转换“11010011”时,它返回 fffffd3。我如何将它作为 d3 返回?这是我的代码 unsigned char string_to_hex(char * neighbors) { char *a = neighbors;整数 = 0;做 { int b = *a=='1'?1:0;数 = (数 = 数
    • 使用无符号字符而不是整数。格式说明符也使用“%02X”。
    • 移位有符号整数在 c 中未定义。
    • @self。如果num 右移超过sizeof(int)*CHAR_BIT - 1 次,或者得到的数学值不能用num 表示,它可能导致UB。这里都没有发生,所以没有 UB。一般来说,如果操作不正确,移动有符号数字很容易导致 UB。但并不总是 UB。不过,在大多数情况下,使用 unsigned 可以省去麻烦;-)
    • @BlueMoon 你是对的,标准同意,我仍然不会这样做。与此同时,您可以阅读并支持我的问题 :-) stackoverflow.com/questions/23582544/…
    【解决方案3】:
    void binaryToHex(const char *inStr, char *outStr) {
        // outStr must be at least strlen(inStr)/4 + 1 bytes.
        static char hex[] = "0123456789ABCDEF";
        int len = strlen(inStr) / 4;
        int i = strlen(inStr) % 4;
        char current = 0;
        if(i) { // handle not multiple of 4
            while(i--) {
                current = (current << 1) + (*inStr - '0');
                inStr++;
            }
            *outStr = hex[current];
            ++outStr;
        }
        while(len--) {
            current = 0;
            for(i = 0; i < 4; ++i) {
                current = (current << 1) + (*inStr - '0');
                inStr++;
            }
            *outStr = hex[current];
            ++outStr;
        }
        *outStr = 0; // null byte
    }
    

    【讨论】:

      【解决方案4】:

      怎么样

      char *binary_str = "10010011";
      unsigned char hex_num = 0;
      
      for (int i = 0, char *p = binary_str; *p != '\0'; ++p, ++i)
      {
          if (*p == '1' )
          {
              hex_num |= (1 << i);
          }
      }
      

      现在你已经有了 hex_num,你可以用它做你想做的事。请注意,您可能希望验证输入字符串的长度或将循环限制为 hex_num 中的位数。

      【讨论】:

        猜你喜欢
        • 2017-02-23
        • 2014-08-03
        • 2018-01-31
        • 2020-01-04
        • 2016-06-02
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        相关资源
        最近更新 更多