将float转换为char *

如何在C语言中将float值转换为char*

 char buffer[64]; int ret = snprintf(buffer, sizeof buffer, "%f", myFloat); if (ret < 0) { return EXIT_FAILURE; } if (ret >= sizeof buffer) { /* Result was truncated - resize the buffer and retry. } 

这将在myCharPointer存储myFloat的字符串表示myCharPointer 。 但要确保字符串足够大以容纳它。

snprintf是一个比sprintf更好的选择,因为它保证它永远不会超过你在参数2中提供的缓冲区的大小。

 char array[10]; sprintf(array, "%f", 3.123); 

sprintf :(来自MSDN)

在Arduino:

 //temporarily holds data from vals char charVal[10]; //4 is mininum width, 3 is precision; float value is copied onto buff dtostrf(123.234, 4, 3, charVal); monitor.print("charVal: "); monitor.println(charVal); 
 char* str=NULL; int len = asprintf(&str, "%g", float_var); if (len == -1) fprintf(stderr, "Error converting float: %m\n"); else printf("float is %s\n", str); free(str); 
 typedef union{ float a; char b[4]; } my_union_t; 

您可以逐字节访问浮点数据值,并通过8位输出缓冲区(例如USART)发送它而不进行转换。

接受答复后很久。

使用sprintf()或相关函数,因为许多其他人都有建议的答案,但使用更好的格式说明符。

使用"%.*e" ,代码解决了各种问题:

  • 所需的最大缓冲区大小更合理,如18. sprintf(buf, "%f", FLT_MAX); 可能需要47+。 sprintf(buf, "%f", DBL_MAX); 可能需要317+

  • 使用".*"允许代码定义区分字符串版本的float x和下一个最高float所需的小数位数。 对于deatils,请参阅Printf宽度说明符以保持浮点值的精度

  • 使用"%e"允许代码区分小float而不是所有打印"0.000000" ,这是|x| < 0.0000005的结果|x| < 0.0000005 |x| < 0.0000005

     #define FLT_STRING_SIZE (1+1+1+(FLT_DECIMAL_DIG-1)+1+1+ 4 +1) // - d . dddddddd e - dddd \0 char buf[FLT_STRING_SIZE]; sprintf(buf, "%.*e", FLT_DECIMAL_DIG-1, some_float); 

思路:
IMO,最好使用2x缓冲区大小的缓冲区,如buf[FLT_STRING_SIZE*2]
为了增加健壮性,请使用snprintf()

 char array[10]; snprintf(array, sizeof(array), "%f", 3.333333);