[英]Converting floats and integers to char*
我剛接觸C,對使用C進行嵌入式處理非常感興趣。我需要轉換為char*
並將整數和浮點數(僅0.01分辨率)輸出到具有8位接口的LCD屏幕上。 我已經閱讀了一些帖子,並且看到了所有將int
和float
轉換為char*
好主意,但是我不確定它們中到底發生了什么。
有人可以提供我的兩個查詢方法和一些解釋嗎?
它實際上取決於標准庫,在某些嵌入式系統中,該庫是部分實現的,甚至不存在的。 使用完全標准的C99實施,您可能會做類似的事情
char buf[40];
int i;
double x;
// compute i & x, then make a string from them with::
snprintf(buf, sizeof(buf), "i=%2d x=%.2f", i, x);
然后,您可以將該buf
發送到LCD端口,或將其strdup
以供以后使用。 (如果使用strdup
,則需要free
結果)。
有關詳細信息,請閱讀snprintf的文檔。 您可能應該測試snprintf
的return int
值。
由於您正在從事嵌入式編程工作,因此您應該意識到以下事實:標准轉換通常利用除法運算,這在任何處理器上都非常繁重。
由於整數是通過除以十來轉換的,因此您可以使用乘以不變整數來實現除法。 此方法應允許您在使用除法轉換值中的一位數字時轉換大多數值。
對於浮點,請執行以下步驟:
這是一個需要兩個小數的示例
3758.3125
375831.25 (multiply by 10^2)
375831.75 (add 0.5)
375831 (convert to integer)
"375831" (convert to string)
"3758.31" (insert decimal point => final result)
更加困難的情況
-0.0625
0.0625 (keep sign)
6.25 (multiply by 10^2)
6.75 (add 0.5)
6 (convert to integer)
"6" (convert to string)
"006 (insert ascii 0 as required)
"-006" (insert minus sign)
"-0.06" (insert decimal point => final result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.