将浮点数和整数转换为char *

时间:2012-10-26 16:32:51

标签: c embedded

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

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

2 个答案:

答案 0 :(得分:4)

它实际上取决于标准库,并且在某些嵌入式系统中,库部分实现,甚至不存在。使用完全standard 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值。

答案 1 :(得分:3)

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

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

对于浮点数,请使用以下步骤:

  1. 保存标志,如果标志为负,则取绝对值
  2. 乘以10.0提升到您需要的小数位数
  3. 添加0.5并转换为整数
  4. 使用之前建议的分割方法将整数转换为字符串
  5. 确保字符串至少为小数位数+ 1,必要时在开头插入ascii 0
  6. 根据需要在开头插入减号
  7. 在适当的位置插入小数点
  8. 这是一个需要两位小数的例子

    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)