bit int 4x8 a entero de 32 bits
Pregunta
tengo
_int8 arr[0] = 0;
_int8 arr[1] = 0;
_int8 arr[2] = 14;
_int8 arr[3] = 16;
necesito para convertirlo en uno _int32 utilizando como matriz [0] como primera parte <..> y arr [3] cuya última. Al final debería ser
_int32 back = 3600;
cambios de uso de bits ¿Debo o Smth como que para lograr esto?
Solución
Si conoce el orden de bytes (es decir big endian o little endian, encontrar esta información en Wikipedia), y la matriz se estableció en el orden correcto sólo se puede hacer:
back = *(_int32 *)arr;
Esto sólo va a interpretar su gama de 4 bytes como un amortiguador que sostenía un solo número entero de 32 bits. En su ejemplo, sin embargo, creo que lo tienes configurado para big endian y x86 no lo es. Así que había necesidad de cambiar algunos bytes.
Por ejemplo:
_int32 back = arr[0] << 24 | arr[1] << 16 | arr[2] << 8 | arr[3];
o algo por el estilo.
Otros consejos
Reparto todos ellos a continuación, utilizar int
:
(arr[0] << 24) | (arr[1] << 16) | (arr[2] << 8) | arr[3]
Alternativamente:
_int32 back = 0;
for (int i = 0; i < 4; ++i)
back = (back << 8) | arr[i];
Es probablemente mi compilador SCO pero yo creo que he tenido problemas si yo no uso (arr [0] y 0xff) y así sucesivamente para hacer los cambios. Ciertamente, no se pierde nada de nada.