C 将 uint32 类型转换为 uint16

C typecasting uint32 to uint16

typedef struct a{
    uint32 val1;
    }A;

typedef struct b{
    uint16 copy_val1;
}B; 


void function1(A input)
{
    B my_input;

    my_input.copy_val1 = (uint16) input.val1; <-- Is this clean?
}

最初设计struct a时,以为val1会包含两个16位的值。但是我们选择只使用一个 16 位。

现在我正在将 copy_val1 的类型从 uint32 更改为 uint16 以节省内存。 我应该如何以干净的方式进行类型转换并确保将 val1 中的 16 位值复制到 copy_val1?

OS是MIPS架构下的vxworks

只需将 uint32 值分配给 uint16 变量,无需强制转换就足够了。

但是,您运行有t运行阳离子的风险。您应该考虑在赋值前检查是否 val1 > UINT16_MAX

另请注意,对于大于一个或两个机器寄存器的结构,您应该将 指针 传递给结构。否则你会招致一个潜在的大副本。但是,请注意语义上的变化。

很干净。即使没有强制转换,旧的编译器也会接受这一点。 请记住,您仅传递 uint32 值的最低 16 位。