簡體   English   中英

將浮點數和整數轉換為char *

[英]Converting floats and integers to char*

我剛接觸C,對使用C進行嵌入式處理非常感興趣。我需要轉換為char*並將整數和浮點數(僅0.01分辨率)輸出到具有8位接口的LCD屏幕上。 我已經閱讀了一些帖子,並且看到了所有將intfloat轉換為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值。

由於您正在從事嵌入式編程工作,因此您應該意識到以下事實:標准轉換通常利用除法運算,這在任何處理器上都非常繁重。

由於整數是通過除以十來轉換的,因此您可以使用乘以不變整數來實現除法。 此方法應允許您在使用除法轉換值中的一位數字時轉換大多數值。

對於浮點,請執行以下步驟:

  1. 保存符號並在符號為負時取絕對值
  2. 乘以10.0升至所需的小數位數
  3. 加0.5並轉換為整數
  4. 使用先前建議的除法將整數轉換為字符串
  5. 確保字符串至少為小數位數+ 1,並根據需要在開頭添加ascii 0
  6. 根據需要在開頭插入減號
  7. 在適當位置插入小數點

這是一個需要兩個小數的示例

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM