将浮点数和整数转换为char *
我是C的新手,并且用C来进入这个嵌入式处理世界。我需要转换为char*
并将输出整数和浮点数(仅0.01分辨率)输出到具有8位接口的LCD屏幕。 我一直在阅读一些post,我看到所有这些将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
值。
由于您正在进行嵌入式编程,因此您应该意识到标准转换通常会利用对任何处理器都非常重要的分区。
由于整数是使用十分之一转换的,因此您可以使用不变整数乘法来实现除法。 此方法应允许您使用除法转换值中转换单个数字所需的时间内的大多数值。
对于浮点使用以下步骤:
- 保存标志,如果标志为负,则取绝对值
- 乘以10.0提高到你需要的小数位数
- 加0.5并转换为整数
- 使用之前建议的除法将整数转换为字符串
- 确保字符串至少为小数位数+ 1,必要时在开头插入ascii 0
- 根据需要在开头插入一个减号
- 在适当的位置插入小数点
这是一个需要两位小数的例子
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)