我有一个uint8_t
数组,我需要从中获取前4个元素(32位),以便在我的机器上创建size_t
(uint32_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个字节,好像数组是任何旧的内存块而不是必须手动添加和相乘以找到我想要的值?
答案 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);