inserte una matriz de códigos hexadecimales en un entero

Estoy tratando de hacer algo que pensé que sería bastante básico, pero o simplemente estoy ignorando algo obvio o es un poco complicado. Mi problema es: tengo una matriz de 4 caracteres que contiene 4 valores hexadecimales. Por ejemplo:

array[0] = 0xD8 array[1] = 0xEC array[2] = 0xA2 array[3] = 0x83 

Quiero almacenar esta matriz en un entero con el valor combinado, en este caso 0xD8ECA283

He intentado hacer OR lógico y luego cambiar los bits y con este método logré almacenar el valor de 0xD8 en el entero, pero no en el rest. Cualquier consejo sería apreciado.

Esto debería hacerlo:

 int i; int combined = 0; for (i = 0; i < 4; i++) { combined = (combined << 8) | ((unsigned char) array[i]); } 

Utilice el binario u operador, y un número entero cuya precisión se garantice que sea de al menos 32 bits, que es el tipo sin signo largo (aunque también se podría usar el tipo uint_least32_t).

Se utiliza un entero sin signo, por lo que se evita cualquier comportamiento potencial indefinido y / o definido por la implementación que está presente cuando se cambian los enteros con signo.

Esta solución es independiente de la endianidad.

 unsigned long a = ( ( ( unsigned long )array[0] & 0xFF ) << 24 ) | ( ( ( unsigned long )array[1] & 0xFF ) << 16 ) | ( ( ( unsigned long )array[2] & 0xFF ) << 8 ) | ( ( ( unsigned long )array[3] & 0xFF ) << 0 ) ; 

Las conversiones a ( unsigned long ) se realizan para evitar la conversión implícita intermedia a int .
La operación & 0xFF está ahí para eliminar los bits innecesarios (si hubiera alguno en un escenario improbable donde CHAR_BIT! = 8).