0

我是 C 的新手,有点想进入这个使用 C 进行嵌入式处理的世界。我需要将char*整数和浮点数(仅 0.01 分辨率)转换并输出到具有 8 位接口的 LCD 屏幕。我一直在阅读一些帖子,我看到了所有这些转换intfloat转换的好主意,char*但我不确定它们发生了什么。

有人可以为我的两个查询和一点解释提供一种方法吗?

4

2 回答 2

4

它实际上取决于标准库,并且在某些嵌入式系统中,该库已部分实现,甚至不存在。使用完全标准的 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的文档。您可能应该测试int.snprintf

于 2012-10-26T16:37:46.653 回答
3

由于您正在从事嵌入式编程,因此您应该意识到标准转换通常使用对任何处理器都非常繁重的划分。

由于整数是使用除以十来转换的,因此您可以使用乘以不变整数来实现除法。此方法应允许您在使用除法转换值中的单个数字所需的时间内转换大多数值。

对于浮点使用以下步骤:

  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)
于 2012-10-26T18:06:25.487 回答