我正在开发一个程序,我将 Fifo 数据存储在以下变量中。 uint16_t 样本[16]; 后来我需要对我找到的程序的结果应用一些过滤器,但他已将 fifo 数据存储在变量中,如下所示: uint32_t 样本1 = 0;
我不确定是否可以将变量等同为: uint32_t 样本1 = uint16_t 样本[16] 或 uint32_t 样本1 = 样本[16]
如何将 uint16_t 数组数据传输到 uint32_t 变量?
你需要意识到像endianness这样的东西存在
你需要考虑到这一点。
但是,如果
uint16_t
中的字节顺序与您的目标匹配,并且只有 uint16_t
的顺序可以不同,您可以使用 union
来实现:
uint32_t combine(const uint16_t *array, size_t offset, int order)
{
union d32
{
uint32_t u32;
uint16_t u16[2];
}data;
if(order) data = (union d32){.u16[0] = array[offset], .u16[1] = array[offset + 1]};
else data = (union d32){.u16[1] = array[offset], .u16[0] = array[offset + 1]};
//or without if
// data = (union d32){.u16[!order] = array[offset], .u16[!!order] = array[offset + 1]};
return data.u32;
}