2014-09-10 59 views
2

我創建了uint8_t和uint16_t變量類型,並從某些寄存器中讀取值。但是,我不確定我是否可以輕鬆地將它們轉換爲浮點數,並且轉換是否具有數字意義。如何將uint8_t和uint16_t轉換爲C++中的浮點數?

什麼是投uint8_t和uint16_t,成浮點的最佳方法是什麼?

+4

您只需將它們存儲在一個變量中。你還需要什麼? – 2014-09-10 14:13:57

回答

8

沒有必要施放;整數類型可以隱式轉換爲浮點類型。

uint8_t u8 = something; 
uint16_t u16 = whatever; 

float f1 = u8; 
float f2 = u16; 

8和16位整數值應該精確表示。較大的類型可能會失去一些精度。

+5

+1:請注意任何小於2^23的正整數都可以在「float」中精確表示。 – Bathsheba 2014-09-10 14:19:57

1

現在西摩的答案和Bathsheba的評論很好,但我最近被C++ 11的一個案例所打擊,所以會嘗試一個替代答案,這對您使用轉換可能是有用的或完全不相關的。

從整數轉換到浮體可以有時需要多次循環!

所以,如果你要轉換的值僅是實際值的數量有限,或者他們litterals或編譯器的原因,他們是常數,有一個(運行)更快的方式。

constexpr float ToFloatAtCompileTime(uint8_t u8) { 
    return u8; // implicit conversion to return type 
} 

float f1 = ToFloatAtCompileTime(u8); 

注意:你的編譯器可能做到這一點隱含更高的優化級別。