Как преобразовать двоичный код в шестнадцатеричный, используя битовое смещение / маскирование - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь преобразовать строковое представление 32-разрядного двоичного числа в строковое представление шестнадцатеричного значения этого числа в функции с именем hexConversion().Для этого мне нужно использовать только базовое программирование на C (для циклов, базовых массивов) и сдвиг / маскирование битов.В этом назначении используется двоичное представление, которое возвращается как массив из другой функции binaryConversion().

У меня есть идея, как преобразовать 4-битные значения в их шестнадцатеричные значения, но я не совсем понимаю, как на самом деле разбить 32-битное значение на меньшие и более работоспособные 4-битные значения.

Например, я мог бы захотеть изменить 11111111111111111111111111111111 на 1111 1111 1111 1111 1111 1111 1111 1111, чтобы я мог работать с каждым 1111 отдельно, чтобы преобразовать каждый в F

1 Ответ

0 голосов
/ 05 марта 2019

«Basic 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;
    }
}
...