我有这个警告。你能帮我吗 ?
warning: narrowing conversion of ‘action’ from ‘uint32 {aka unsigned int}’ to ‘uint8 {aka unsigned char}’
如何安全地将uint32转换为uint8?
由于
答案 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.如果你是好的,那就是你的解决方案。如果没有,那么因为您使用了错误的类型而发出警告是件好事!