Как получить 8-битное двоичное представление символа в C?

Если у меня есть массив символов, и я хочу получить 8-битное двоичное представление каждого из символов, как мне это сделать? Я мог получить только целые значения, но не знаю, как преобразовать char или его целое значение ascii в 8 бит.

Благодарю вас!


person Iris Lim    schedule 23.01.2020    source источник
comment
char уже является 8-битным значением. Так что не понятно, что вы имеете в виду. Не могли бы вы показать пример кода того, что вы пытаетесь сделать?   -  person kaylum    schedule 23.01.2020
comment
Для каждого символа c, где (' ' <= c <= '~'), вы можете вывести двоичное представление с помощью for (i = CHAR_BIT - 1; i >= 0; i--) putchar ((c >> i) & 1 ? '1' : '0'); putchar ('\n');. Вам нужно будет включить limits.h для CHAR_BIT.   -  person David C. Rankin    schedule 23.01.2020


Ответы (2)


char number = something;
char bits[8];
for (int i = 0; i < 8; i++)
{
    bit[i] = (number >> i) & 1;
}

Это сдвигает число вправо на i позиций (>>), так что каждый бит в числе перемещается в крайнюю правую позицию.

Затем выполняется И (&) с 1, что устанавливает все остальное в 0. (1 в двоичном формате имеет нули везде, кроме самой правой позиции)

Если вы хотите напечатать 8-битное представление, вы добавляете это внутри цикла:

printf("%d", bits[i]);
person mr_guy99493    schedule 23.01.2020

Если у меня есть массив символов

unsigned char charBuff[5] = {'a','b','c','d', '\0'};

и я хочу получить 8-битное двоичное представление каждого из символов, как мне это сделать?

Чтобы напечатать двоичный эквивалент каждого символа массива, вы можете выполнить следующие шаги.

Шаг 1. Найдите количество элементов в заданном массиве символов.

unsigned char charBuff[5] = {1,2,3,4};
unsigned int numElem = sizeof(charBuff) / sizeof(charBuff[0]);

Шаг 2. Поверните цикл до numElem раза. Например,

for(index = 0; index < numElem; index++)
{
}

Шаг 3: выберите индекс каждого массива символов и реализуйте функциональность, чтобы получить двоичный эквивалент каждого символа в массиве.

for(index = 0; index < numElem; index++)
{
    /* select charBuff[index] and charBuff[index] is a single char i.e it can only 8 bits hence rotate inner loop 8 times */
    for(subIndex = 0; subIndex < 8; subIndex++)
    {
        printf("%d", (charBuff[index]) >> subIndex & 1); /* it prints 0 or 1 */
    }

    printf(" "); /* Optional : print white space for readability after printing binary equivalent of charBuff[index] */
 }
person Achal    schedule 23.01.2020