-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文檔和/或源代碼。 –