将int转换为uint8_t

16

将一个int值转换为uint8_t的方法是否正确:

int x = 3; 
uint8_t y = (uint8_t) x;

假设x永远不会小于0。虽然gcc对上述行没有任何警告,但我想确认这样做是否正确或者有更好的方法将int转换为uint8_t?

P.S. 我在Linux上使用C语言,如果您要建议标准函数。


什么才能算作一种更好的方式? - Nbr44
4
不需要进行类型转换,仅需使用 y = x; 即可。 - R.. GitHub STOP HELPING ICE
Nbr44,我的意思是更好的方式是,如果有标准的方法,或者上述转换可能会导致问题,而替代建议不会引起该问题。 - Johan Elmander
1
即使很明显,也要小心uint8_t溢出。 - Xaqq
1
建议使用 y = x; 而不是 uint8_t y = x; 可能会引入一个错误,如果之前在作用域中已经声明了变量 y - Eric Postpischil
1个回答

22

这是正确的,但是类型转换不必要:

uint8_t y = (uint8_t) x;

等同于

uint8_t y = x;

x在上面的声明中初始化之前被隐式转换为uint8_t


1
除非你正在使用Visual Studio,否则你需要一个& 0xff来防止它抱怨 :P - Drew McGowen
假设 int 可以适应于 short - mohit
@DrewMcGowen C语言不需要诊断,这是一个有效的声明,实现不能拒绝进行翻译,但当然实现可以发出额外的信息性消息。 - ouah
@ouah 是的,我知道,只是觉得我应该指出VS的行为。 - Drew McGowen
@EricPostpischil 已修复。我总是记得这个 C 引用的初始化方式 适用于简单赋值的相同类型约束和转换 - ouah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接