Łącz liczby binarne o różnych długościach

Więc mam 3 liczby. Jeden tochar, a pozostałe dwa sąint16_t (znany również jakoshorts, ale według tabeli znalazłem, że szorty nie będą niezawodnie miały 16 bitów).

Chciałbym je połączyć. Więc powiedzmy, że ich wartości były:

10010001

1111111111111101

1001011010110101

Chciałbym skończyć zlong long zawierający:

1001000111111111111111011001011010110101000000000000000000000000

Korzystając z niektórych rozwiązań, które znalazłem w Internecie, wymyśliłem to:

long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;

Ale to nie działa; daje mi bardzo dziwne liczby, gdy jest dekodowane.

W przypadku wystąpienia problemu z moim kodem dekodowania jest to:

char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;

Co tu się dzieje? Podejrzewam, że ma to związek z rozmiarem along long, ale nie mogę do końca owinąć głowy i chcę mieć więcej miejsca na kolejne numery.

questionAnswers(4)

yourAnswerToTheQuestion