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

问题描述 投票:0回答:1

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

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

例如,我可能想将11111111111111111111111111111111更改为1111 1111 1111 1111 1111 1111 1111 1111,以便我可以分别使用每个1111将每个F转换为binaryConversion(const char *bits, char *buf, int len) { snprintf(buf, len, "%lx", strtol(bits, NULL, 2)); }

c binary hex bit-shift bitmask
1个回答
0
投票

“基本C”,但也许不是你想要的......

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;
    }
}

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

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.