繁体   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