herr.jth
22-03-2008, 23:55
Hallo,
ich kriege über einen Socket 2 Byte, die eine fortlaufende Zahl darstellen sollen.
Diese Zahl befindet sich jetzt in einem 2-Byte langen Buffer, praktisch so:
[ 123 ] [ 214 ]
Das wäre jetzt zusammen betrachtet 123214. Allerdings würde ich diesen Wert jetzt gerne als long haben. Falls das ganze in nur einem Byte untergebracht wäre, d.h. 0-255, wäre das ganze kein Problem, aber die 2 Byte machen mir Kopfschmerzen.
Die bisherige Bitshift-Lösung sah so aus:
act_size = (*ackbuf++ << 8);
act_size &= 0xff00;
act_size += (*ackbuf++ & 0x00ff);
was soweit auch funktionierte, zumindest auf meinem Little Endian Core 2. Jetzt sitze ich hier allerdings an einem Motorola G4 der Big Endian verwendet und das ganze funktioniert nichtmehr :(
Ich habe jetzt versucht die bytes einzeln rauszuziehen und mit atoi umzuwandeln, allerdings bringt mir das auch nichts wenn die Werte über 255 hinaus gehen und so das 2. Byte mit einbezogen werden muss...
Ich hoffe jemand hat eine Idee wie man sowas portabel lösen kann, ich bin hier langsam aber sicher am verzweifeln :(
Danke schonmal im vorraus :)
ich kriege über einen Socket 2 Byte, die eine fortlaufende Zahl darstellen sollen.
Diese Zahl befindet sich jetzt in einem 2-Byte langen Buffer, praktisch so:
[ 123 ] [ 214 ]
Das wäre jetzt zusammen betrachtet 123214. Allerdings würde ich diesen Wert jetzt gerne als long haben. Falls das ganze in nur einem Byte untergebracht wäre, d.h. 0-255, wäre das ganze kein Problem, aber die 2 Byte machen mir Kopfschmerzen.
Die bisherige Bitshift-Lösung sah so aus:
act_size = (*ackbuf++ << 8);
act_size &= 0xff00;
act_size += (*ackbuf++ & 0x00ff);
was soweit auch funktionierte, zumindest auf meinem Little Endian Core 2. Jetzt sitze ich hier allerdings an einem Motorola G4 der Big Endian verwendet und das ganze funktioniert nichtmehr :(
Ich habe jetzt versucht die bytes einzeln rauszuziehen und mit atoi umzuwandeln, allerdings bringt mir das auch nichts wenn die Werte über 255 hinaus gehen und so das 2. Byte mit einbezogen werden muss...
Ich hoffe jemand hat eine Idee wie man sowas portabel lösen kann, ich bin hier langsam aber sicher am verzweifeln :(
Danke schonmal im vorraus :)