从uint8_t数组的四个元素获取uint32_t的优雅方法?

时间:2014-05-24 02:44:39

标签: c arrays

我有一个uint8_t数组,我需要从中获取前4个元素(32位),以便在我的机器上创建size_tuint32_t)。

非工作代码示例:

uint8_t array[8];
array[0] = 128;
array[1] = 128;
array[2] = 0;
array[3] = 0;
size_t size = array[0]; //results in 128
size = *array; //also results in 128

该数组的前四个索引的字节为80 80 00 00

我希望size_t通过读取该数组的前4个字节的数据,得到128 + 256 * 128,小端。有没有办法让size_t初始化直接读取这4个字节,好像数组是任何旧的内存块而不是必须手动添加和相乘以找到我想要的值?

3 个答案:

答案 0 :(得分:6)

以便携方式(即字节独立)使用移位运算符。像

这样的东西
uint32_t result = 0;
for(int i=3; i>=0; --i) {
    result <<= 8;
    result += array[i];
}
// result now holds the value you desire

答案 1 :(得分:2)

这是正常的方式:

inline uint32 little_endian_to_uint32(uint8 *p)
{
    return p[0] + p[1] * 0x100ul + p[2] * 0x10000ul + p[3] * 0x1000000ul;
}

您的编译器应该生成最佳的代码。

答案 2 :(得分:-1)

知道了。就在我问之后,当然!

uint32_t size = *((uint32_t*) array);