如何使用移位/屏蔽将二进制转换为十六进制

时间:2019-03-05 04:25:53

标签: c binary hex bit-shift bitmask

我正在尝试在名为hexConversion()的函数中将32位二进制数的字符串表示形式转换为代表该数字的十六进制值的字符串。为此,我只需要使用基本的C编程(用于循环,基本数组)和移位/屏蔽。在此分配中,使用的二进制表示形式是从另一个函数binaryConversion()作为数组返回的形式。

我确实知道如何将4位值转换为十六进制值,但是我对如何将32位值实际分解为更小,更可行的4位值感到困惑。

例如,我可能想将11111111111111111111111111111111更改为1111 1111 1111 1111 1111 1111 1111 1111,以便我可能能够分别处理每个1111并将其转换为F

1 个答案:

答案 0 :(得分:0)

“基本C”,但可能不是您想要的...

binaryConversion(const char *bits, char *buf, int len) {
    snprintf(buf, len, "%lx", strtol(bits, NULL, 2));
}

一个专门使用位掩码和移位的更复杂的解决方案可能是这样的...

binaryConversion(const char *bits, char *buf, int len) {
    const char *xdig = "0123456789ABCDEF";
    long val = strtol(bits, NULL, 2);
    int i;
    for (i = 0; i < 8; ++i) {
        int nib = val & 0xf;
        if (len > i) buf[i] = xdig[nib];
        val = val << 4;
    }
}