如何在C中将uint16_t arr[16]转换为uint32_t Var?

问题描述 投票:0回答:1

我正在开发一个程序,我将 Fifo 数据存储在以下变量中。 uint16_t 样本[16]; 后来我需要对我找到的程序的结果应用一些过滤器,但他已将 fifo 数据存储在变量中,如下所示: uint32_t 样本1 = 0;

我不确定是否可以将变量等同为: uint32_t 样本1 = uint16_t 样本[16] 或 uint32_t 样本1 = 样本[16]

The following error is throw, when I try to covert

如何将 uint16_t 数组数据传输到 uint32_t 变量?

arrays c type-conversion uint32
1个回答
0
投票

你需要意识到像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;
}
© www.soinside.com 2019 - 2024. All rights reserved.