我创建了 uint8_t 和 uint16_t 变量类型,并从一些寄存器中将值读入其中。但是,我不确定是否可以轻松地将这些转换为浮点数,以及转换是否具有数字意义。
将 uint8_t 和 uint16_t 转换为浮点数的最佳方法是什么?
我创建了 uint8_t 和 uint16_t 变量类型,并从一些寄存器中将值读入其中。但是,我不确定是否可以轻松地将这些转换为浮点数,以及转换是否具有数字意义。
将 uint8_t 和 uint16_t 转换为浮点数的最佳方法是什么?
无需投射;整数类型可以隐式转换为浮点类型。
uint8_t u8 = something;
uint16_t u16 = whatever;
float f1 = u8;
float f2 = u16;
8 位和 16 位整数值应准确表示。较大的类型可能会损失一些精度。
现在 Seymours 的回答和 Bathsheba 的评论很好,但我最近遇到了一个 C++11 的案例,所以会尝试一个替代答案,这可能对您使用转换有用或完全不相关。
从整数到浮点数的转换有时需要很多周期!
因此,如果您要转换的值只是实际值的有限数量,或者它们是文字,或者编译器可以推断它们是常量,那么有一种(运行时)更快的方法。
constexpr float ToFloatAtCompileTime(uint8_t u8) {
return u8; // implicit conversion to return type
}
float f1 = ToFloatAtCompileTime(u8);
注意:您的编译器可能会在更高的优化级别上隐式执行此操作。