[英]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.