-1
double d = 3.3;
char str[50];
sprintf(str, " \t%f", d);
USBD_VCOM_SendString(str);
希望从我的μController发送到我的计算机,但str总是接缝为空。用int也试过,它工作正常。也不适用于浮动。 我正在使用ARM-GCC C编译器。不能将float或double转换为字符数组(sprintf)
double d = 3.3;
char str[50];
sprintf(str, " \t%f", d);
USBD_VCOM_SendString(str);
希望从我的μController发送到我的计算机,但str总是接缝为空。用int也试过,它工作正常。也不适用于浮动。 我正在使用ARM-GCC C编译器。不能将float或double转换为字符数组(sprintf)
3个需要解决的问题。
1)一些编译器,即使使用浮点数指定符*printf()
,做不包括包括FP支持,除非代码在代码的其他地方有FP数学。确保代码在其他地方使用FP,或者编译器没有此限制。
2)使用不会溢出的缓冲区和*printf()
说明符。 @Jonathan Leffler
"%e"
而不是"%f"
是避免过长字符串的简单方法。 3)打印sufficient precision。
#include <float.h>
// - d . ddddddd e - expo \0 spare
char str[1 + 1 + 1 + (DBL_DECIMAL_DIG - 1) + 1 + 1 + 5 + 1 + 10];
snprintf(str, sizeof str, "%.*e", DBL_DECIMAL_DIG - 1, d);
USBD_VCOM_SendString(str);
看起来好像在CRT中没有实现浮点数格式化。 –
谢谢。这听起来像是一个大问题。任何其他方式来将浮点数或double转换为char数组? – Shilence
我不完全确定,它只是_looks_如此。查看应该提供的CRT文档和/或源代码。 –