C将uint32转换为uint16

时间:2016-07-15 22:23:25

标签: c static-cast

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?

操作系统是MIPS架构中的vxworks。

2 个答案:

答案 0 :(得分:1)

简单地将uint32值分配给uint16变量,而不使用强制转换就足够了。

但是,您冒着截断的风险。在分配之前,您应该考虑检查是否val1 > UINT16_MAX

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

答案 1 :(得分:0)

那很干净。即使没有演员,旧的编译器也会接受这个。 请记住,您只传递了uint32值的最低16位。