4x8 Bit int zu 32-Bit-Integer
Frage
Ich habe
_int8 arr[0] = 0;
_int8 arr[1] = 0;
_int8 arr[2] = 14;
_int8 arr[3] = 16;
muß ich es einen _int32 konvertieren mit als arr [0] als erster Teil <..> und arr [3], zuletzt. Am Ende sollte es sein
_int32 back = 3600;
Soll ich Bit-Verschiebungen oder smth wie das dies zu erreichen?
Lösung
Wenn Sie die Byte-Reihenfolge kennen (das heißt Big-Endian oder Little-Endian, überprüfen Sie es auf wikipedia out), und das Array in der richtigen Reihenfolge einrichten Sie gerade tun:
back = *(_int32 *)arr;
Das wird nur Ihr Array von 4 Bytes als Puffer interpretiert eine einziges 32-Bit-Integer zu halten. obwohl in Ihrem Beispiel, ich glaube, Sie es für Big-Endian und x86 eingerichtet habe ist es nicht. So müssen Sie einige Bytes tauschen.
Zum Beispiel:
_int32 back = arr[0] << 24 | arr[1] << 16 | arr[2] << 8 | arr[3];
oder so ähnlich.
Andere Tipps
Cast them all to int
then use:
(arr[0] << 24) | (arr[1] << 16) | (arr[2] << 8) | arr[3]
Alternatively:
_int32 back = 0;
for (int i = 0; i < 4; ++i)
back = (back << 8) | arr[i];
It's probably my SCO compiler but I think I've had problems if I didn't use (arr[0]&0xff) and so forth for doing the shifts. Certainly doesn't hurt anything.