将hex代码数组插入整数

我正在尝试做一些我认为非常基本的事情,但要么我只是忽略了一些明显的东西,要么实际上有点棘手。 我的问题是:我有一个包含4个hex值的4个字符数组。 例如:

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

我想将这个数组存储在一个带有组合值的整数中,在本例中为0xD8ECA283

我已经尝试进行逻辑OR然后移位,并且使用此方法我设法将0xD8的值存储在整数中,但不是其余的。 任何提示将不胜感激。

这应该这样做:

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

使用二进制或运算符,以及一个整数,其精度保证至少为32位,这是unsigned long类型(尽管也可以使用uint_least32_t类型)。

使用无符号整数,因此避免了在移位有符号整数时存在的任何潜在的未定义和/或实现定义的行为。

该解决方案与字节顺序无关。

 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 ) ; 

转换为( unsigned long )是为了避免中间隐式转换为int
& 0xFF操作用于删除不必要的位(如果在CHAR_BIT!= 8的不太可能的情况下有任何位)。