Verketten Sie Binärzahlen unterschiedlicher Länge

Also habe ich 3 Nummern. Eins ist acharund die anderen beiden sindint16_t (auch bekannt alsshorts, aber laut einer Tabelle habe ich festgestellt, dass Shorts nicht zuverlässig 16 Bit sind).

Ich möchte sie zusammen verketten. Sagen Sie also, dass die Werte von ihnen waren:

10010001

1111111111111101

1001011010110101

Ich möchte am Ende mit einem ... endenlong long enthält:

1001000111111111111111011001011010110101000000000000000000000000

Unter Verwendung einiger Lösungen, die ich online gefunden habe, habe ich Folgendes gefunden:

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

Aber es funktioniert nicht. es gibt mir sehr ungerade Zahlen, wenn es dekodiert ist.

Falls es ein Problem mit meinem Dekodierungscode gibt, hier ist es:

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

Was ist denn hier los? Ich vermute, es hat mit der Größe von a zu tunlong long, aber ich kann mich nicht so richtig darum kümmern und möchte später Platz für mehr Zahlen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage