2016-07-28 246 views
-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)

+0

看起来好像在CRT中没有实现浮点数格式化。 –

+0

谢谢。这听起来像是一个大问题。任何其他方式来将浮点数或double转换为char数组? – Shilence

+0

我不完全确定,它只是_looks_如此。查看应该提供的CRT文档和/或源代码。 –

回答

0

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); 
相关问题