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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top