如何将浮点数转换为char *?


11

在电气工程堆栈交换上问了这个问题,并直接在这里进行:

自我解释;我将如何将浮点数转换为char *?我有一些代码,其中的浮动“电阻”不断更新。我希望能够将变量“结果”更新为“电阻”的值。如果有帮助,以下是一些代码:

const char * result = "";
float resistance = 2.5;

result = resistance; //This bit (obviously) doesn't work

谢谢你的帮助!

Answers:


15

标准Arduino库中有一个名为的函数dtostrf()。我认为它是“十进制到字符串浮点数”。您传入浮点数,想要整数的宽度(如果合适),精度的小数位数以及要填充的缓冲区。

注意!您需要提供缓冲区,并且需要小心提供足够的缓冲区!也不要忘记添加1(在末尾存储NUL字符):

char result[8]; // Buffer big enough for 7-character float
dtostrf(resistance, 6, 2, result); // Leave room for too large numbers!

这将给出result诸如" 1.23"" -1.23"和的值"123456789"(不带引号)。请注意最后一个示例-如果数字太大,它不会截断该数字,而10个字符result(不要忘记最后一个字符NUL)只是溢出了缓冲区...

顺便说一句,如果您指定负宽度,它将不会使答案右对齐,而会使其左对齐(在末尾而不是开始处留空格)。


做得很好!非常感谢先生:)
higgsboson

-2

基本上,您尝试将4字节变量(浮点数)转换为4字节字符串(char变量为1字节大小)。有关Arduino数据类型的更多信息,请参见http://playground.arduino.cc/Code/DatatypePractices

您可以尝试以下问题的答案 /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

/programming/24420246/c-function-to-convert-float-to-byte-array

我承认const char * result = "";您在示例中的使用使我感到困惑。

“ const”关键字将变量设置为“只读”,因此您不能对其进行修改。 https://www.arduino.cc/en/Reference/Const

编辑:不幸的是我现在没有Arduino设备来测试上述解决方案


1
const关键字并没有把这些变量为只读。这里的变量是一个指针,并且不必是常量。该const关键字资格被指向的数据,而不是指针本身。换句话说,不允许您通过该指针修改字符串。如果您想要一个常量指针,则将其声明为char * const result(或const char * const result如果您想要一个const指向const数据的指针)。
Edgar Bonet
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.