Я создал типы переменных uint8_t и uint16_t и считал значения в них из некоторых регистров. Но я не уверен, смогу ли я легко преобразовать их в float, и будет ли преобразование иметь числовой смысл.
Каков оптимальный способ преобразования uint8_t и uint16_t в float?
Там нет необходимости кастовать; целочисленные типы неявно преобразуются в типы с плавающей точкой.
uint8_t u8 = something;
uint16_t u16 = whatever;
float f1 = u8;
float f2 = u16;
8 и 16-битные целочисленные значения должны быть представлены точно. Большие типы могут потерять некоторую точность.
Теперь ответ Сеймура и комментарий Вирсавии хороши, но недавно я столкнулся с ситуацией на C ++ 11, поэтому попробую альтернативный ответ, который может оказаться полезным или совершенно неуместным для использования вами преобразования.
Преобразование из целого числа в число с плавающей точкой иногда занимает много циклов!
Поэтому, если значения, которые вы хотите преобразовать, представляют собой ограниченное число фактических значений, или они являются литералами, или компилятор может посчитать, что они являются константами, существует более быстрый способ (во время выполнения).
constexpr float ToFloatAtCompileTime(uint8_t u8) {
return u8; // implicit conversion to return type
}
float f1 = ToFloatAtCompileTime(u8);
Примечание: ваш компилятор может сделать это неявно на более высоком уровне оптимизации.