在實際專案中,我們不可避免的遇到需要將整數(浮點數)轉換為字串輸出(儲存為檔案或者顯示列印)。這是乙個很常見的演算法,標準c庫甚至提供了諸如itoa,ltoa,之類的函式供大家呼叫。但是,在一些特殊場合,比如對功耗要求比較苛刻的場合,則對轉換速度提出了要求。在微控制器應用中,很多mcu沒有除法器,和除法指令,我們就得變通一下。
1. 浮點數轉字串
我們知道,在微控制器中,浮點運算是比較費時的運算。我們就可以根據自己的精度要求,先將浮點數轉換為整數,在進行整數運算,則會節約不少運算時間。比如我們在資料採集儲存過程中,只需要保留小數點後面三位。那麼,我們對需要轉換的浮點數乘以1000,得到整數。
float f= 417.123;
int it = 0;
it = (int)(f*1000);
2. 整數轉換為字串
一般情況下,我們為了**的簡潔直觀,我們會採用如下形式.然後將得到的字串顛倒一下次序就可以了,因為是從低位往高位計算的。
while(val!=0)
但是,這個方法,每得到一位需要兩次除法運算。故,我們改進一下,
while(val!=0)
這樣,用幾次移位和加減法,代替一次除法,效率就得到了很大的提公升。
如果之前是浮點數轉整數,再進行轉化的,需要記住小數點的位置。
甚至,在某些場合,我們是能預先知道我們這個整數的最大值(這種是可能的,因為對功耗要求極為苛刻的場合,大多都是資料採集系統),也就是數字的位數,我可以用減法來代替除法。據說,很多mcu都是這樣幹的。假如,我的應用中,資料最大值不會超過999999,那麼用空間換時間的寫法如下,
先定義乙個函式,該函式用於獲取s的最高位,t指明了最高位是在哪一位。比如,s小於1000,那麼t=100。
u8 func(u32 *s, u32 t)
return i ;
}
接下來可以得到字串。再特別說明,我預先知道val不會大於999999.
buf[1]= func(&val, 100000);
buf[2]= func(&val, 10000);
buf[3]= func(&val, 1000);
buf[4]= func(&val, 100);
buf[5]= func(&val, 10);
buf[6]= '0' + val;
Python 字串 整數 浮點數
幾個函式 str 將乙個整數或者浮點數變成字串 int 將乙個浮點數或乙個字串變成整數 float 將乙個整數或者字串變成乙個浮點型資料 整數的運算永遠是精確的,而浮點數的運算可能會有四捨五入的誤差 len 可以獲取字串的個數,整數和浮點數沒有這函式 type 可以檢視乙個資料或者變數的型別 有有兩...
c 中字串轉浮點數stod vs atof
背景 程式需要從檔案中讀取double精度的資料。隨著程式的更新,檔案也會更新。但有時候,更新了檔案,卻忘記更新程式,這時啟動程式時,就會coredump。gdb coredump也很容易看出問題,但不能一出問題就讓程式crash啊。於是加了try來catch異常,但是無果,還是dump,於是查了一...
c語言整數轉浮點數 浮點數的秘密
我們在學習 c 語言時,通常認為浮點數和小數是等價的,並沒有嚴格區分它們的概念,這也並沒有影響到我們的學習,原因就是浮點數和小數是繫結在一起的,只有小數才使用浮點格式來儲存。其實,整數和小數可以都使用定點格式來儲存,也可以都使用浮點格式來儲存,但實際情況卻是,c 語言使用定點格式儲存整數,使用浮點格...