Я некоторое время пытался упаковать и распаковать несколько символов в целое число. Хотя есть некоторые темы, связанные с этим вопросом, моя проблема связана с подписанной сменой. Я не понимаю, как распаковать подписанное значение, т.е.
char c1 = -119;
char c2 = 26;
// pack
int packed = (unsigned char)c1 | (c2 << 8);
// unpack
c1 = packed >> 0;
c2 = packed >> 8;
// printf(c1, c2) -> Unpacked data: -119 | 26
Это работает, как и ожидалось, но когда я пытаюсь упаковать больше данных, т.е.:
char c0 = -42;
char c1 = -119;
char c2 = 26;
// pack
int packed = (unsigned char)c0 | (unsigned char)(c1 << 8) | (c2 << 16);
// unpack
c0 = packed >> 0;
c1 = packed >> 8;
c2 = packed >> 16;
// printf -> Unpacked data: -42 | 0 | 26
c1 значение пропущено. Я предполагаю, что это связано с чем-то с бит знака смещен в старшую позицию .
Как я могу вернуть c1 значение?
Заранее спасибо.