Verketten Sie Binärzahlen unterschiedlicher Länge
Also habe ich 3 Nummern. Eins ist achar
und die anderen beiden sindint16_t
(auch bekannt alsshort
s, 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.