Итак, у вас есть байт, и вы хотите следующую битовую разметку:
76543210
AAABBBBB
Для хранения A
вы должны сделать:
unsigned char result;
int input_a = somevalue;
result &= 0x1F; // Clear the upper 3 bits.
// Store "A": make sure only the lower 3 bits of input_a are used,
// Then shift it by 5 positions. Finally, store it by OR'ing.
result |= (char)((input_a & 7) << 5);
Чтобы прочитать это:
// Simply shift the byte by five positions.
int output_a = (result >> 5);
Чтобы сохранить B
, вы должны сделать:
int input_b = yetanothervalue;
result &= 0xE0; // Clear the lower 5 bits.
// Store "B": make sure only the lower 5 bits of input_b are used,
// then store them by OR'ing.
result |= (char)(input_b & 0x1F);
Чтобы прочитать это:
// Simply get the lower 5 bits.
int output_b = (result & 0x1F);
Возможно, вы захотите прочитать о логических операциях И и ИЛИ, битовом сдвиге и, наконец, битовых масках .