将十六进制代码数组插入整数

时间:2015-04-30 13:28:42

标签: c

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

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

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

我尝试过逻辑OR,然后移位这个方法,我设法将0xD8的值存储在整数中,但不是其余的。任何提示将不胜感激。

2 个答案:

答案 0 :(得分:5)

使用二进制或运算符,以及一个整数,其精度保证至少为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)。

答案 1 :(得分:4)

这应该这样做:

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