У меня есть беззнаковый символ длиной 6 байт. Значение, хранящееся в char, равно:
Hex: 53167DFD95B7
Binary: 010100 110001 011001 111101 111111 011001 010110 110111
Что мне нужно сделать, так это захватить бит 1 и бит 6. Затем преобразовать это в десятичное число. Затем захватите биты 2–5 и преобразуйте их в десятичные числа. Например, бит 1 здесь равен 0, бит 6 равен 0, поэтому двоичный 00 — это десятичный 0. Затем для битов 2–5 двоичный 1010 или десятичный 10. Затем перейдите к следующая группа из 6 бит.
Бит 1 равен 1, бит 6 равен 1, поэтому двоичное число 11 или десятичное число 3. Биты 2–5 представляют собой двоичное число 1000 или десятичное число 8.
Бит 1 равен 0, бит 6 равен 1, поэтому двоичный 01 или десятичный 1. Биты 2-5 — двоичный 1100 или десятичный 12.
И так далее для оставшихся групп по 6 бит.
Я не совсем уверен, как я должен маскироваться, перемещаться для этого. Поскольку это всего 6 бит за раз, у меня возникают некоторые трудности. Любая помощь в этом будет принята с благодарностью! Спасибо всем заранее.
ИЗМЕНИТЬ
int getBitVal(unsigned char *keyStrBin, int keyIndex) {
int keyMod = keyIndex % 8;
int keyIn = keyIndex / 8;
return (((keyStrBin[keyIn]) >> (7 - (keyMod))) & 1);
}
void getSValueMajor(char **tableS, unsigned char *f, unsigned char *sValue) {
int i, bitOne, bitSix;
int sCol;
for (i = 0; i < 8; i++) {
bitOne = getBitVal(f, 0);
bitSix = getBitVal(f, 5);
// Do something here to get only bits 2-5. Doesn't matter if its decimal. Just need the 4 bits.
}
}
Сдвиг на 6 бит, я думаю, в конце цикла, чтобы перейти к следующим 6 битам, но не знаю, как прочитать эти 4 бита в переменную.