Как сформировать символьный байт, присваивая значения каждому из битов? - PullRequest
1 голос
/ 28 марта 2011

У меня есть функция C, которая принимает символ.Мне нужно извлечь и вставить биты в этот символ.Я ясно с частью извлечения.Кто-нибудь может дать мне представление о том, как вставить значения в биты?

Ответы [ 5 ]

3 голосов
/ 28 марта 2011

Довольно смутный вопрос, я бы посоветовал вам освежить битовые операторы.Это должно указать вам правильное направление.

http://www.cprogramming.com/tutorial/bitwise_operators.html

2 голосов
/ 28 марта 2011

Поскольку вы запросили идею, а не точную реализацию:

Вот что вы можете сделать,

Перебирайте каждый бит и устанавливайте его как требуется.

Вы можете установить n-й бит (0 проиндексирован следующим образом)

byteVal = byteVal | (1<<N);
1 голос
/ 28 марта 2011

Конечно, просто прибегайте к бинарным операциям. Следующая функция должна делать именно то, что вы хотите, но с простым интерфейсом:

char set8 (char ch, int index) {
   if (index >= 1 && index <= 8) {
        return (char)(ch | (1 << index - 1));
   }
   return ch;
}

int n = 0;

set8(n, 1); // Returns 1
set8(n, 2); // Returns 2
set8(n, 3); // Returns 4

...

set8(n, 9); // Returns n (0)

Функция использует побитовое ИЛИ для переключения указанного бита. Если указанный индекс находится вне диапазона байта (8 бит), он просто возвращает переданный символ.

1 голос
/ 28 марта 2011

Скажем, вы хотите проверить n-й бит символа:

int checkBit(char c, int n) {
    return c & (1 << n);
}

Чтобы установить n-й бит:

void setBit(char *c, int n) {
    *c |= 1 << n;
}
1 голос
/ 28 марта 2011

Если вы хотите установить N-й бит в символе на 1, вам нужно OR его со значением 1, смещенным влево на N позиций:

c |= 1 << N;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...