我正在尝试做一些我认为非常基本的事情,但要么我只是忽略了一些明显的东西,要么实际上有点棘手.我的问题是:我有一个包含4个十六进制值的4个字符数组.例如:
array[0] = 0xD8
array[1] = 0xEC
array[2] = 0xA2
array[3] = 0x83
Run Code Online (Sandbox Code Playgroud)
我想将这个数组存储在一个带有组合值的整数中,在本例中为0xD8ECA283
我已经尝试进行逻辑OR然后移位,并且使用此方法我设法将0xD8的值存储在整数中,但不是其余的.任何提示将不胜感激.
这应该可以做到:
int i;
int combined = 0;
for (i = 0; i < 4; i++) {
combined = (combined << 8) | ((unsigned char) array[i]);
}
Run Code Online (Sandbox Code Playgroud)
使用二进制或运算符,以及一个整数,其精度保证至少为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 ) ;
Run Code Online (Sandbox Code Playgroud)
转换为( unsigned long )避免中间隐式转换为int.
的& 0xFF操作是有以除去无用位(如果存在于一个不太可能的情形是任何其中CHAR_BIT!= 8).
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |