Łą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ż jakoshort
s, 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.