警告缩小转换(uint32到uint8)

时间:2015-01-24 22:21:28

标签: c++

我有这个警告。你能帮我吗 ?

warning: narrowing conversion of ‘action’ from ‘uint32 {aka unsigned int}’ to ‘uint8 {aka unsigned char}’

如何安全地将uint32转换为uint8?

由于

2 个答案:

答案 0 :(得分:1)

警告是正确的,这样的转换有潜在危险(它会丢失24个更高的位)。

您可以通过使用显式强制转换来告诉编译器您真的想要进行此[不安全]转换:

uint8_t my_byte_var = static_cast<uint8_t>(my_int32_var);

这应该取消警告。

答案 1 :(得分:0)

只有在使用list-initialization时才会出现缩小警告/错误,例如:

uint32_t action = 12345;
uint8_t val{action};

您只需使用正常分配:

uint8_t val = action;

虽然缩小仍然会发生,因为12345无法适应uint8_t,所以你将被留下9.如果你是好的,那就是你的解决方案。如果没有,那么因为您使用了错误的类型而发出警告是件好事!