如何在 C
语言中将 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.
}
这将把myFloat
的字符串表示存储在myCharPointer
中。但要确保字符串足够大。
snprintf
比sprintf
更好,因为它保证不会写入超出第二个参数所提供的缓冲区大小的内容。
//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 array[10];
sprintf(array, "%f", 3.123);
sprintf:(来自MSDN)
接受答案之后很久。
使用sprintf()
或其他相关函数,如其他回答所建议的,但使用更好的格式说明符。
使用"%.*e"
,代码可以解决各种问题:
使用"%.*e"
,需要的最大缓冲区大小更加合理,例如对于float
(参见下文),只需要18个字符。使用"%f"
(考虑定点数),sprintf(buf, "%f", FLT_MAX);
可能需要47个或更多字符。sprintf(buf, "%f", DBL_MAX);
可能需要317个或更多字符。
使用".*"
允许代码定义需要区分float x
及其下一个最高float
的小数位数。有关详细信息,请参见printf width specifier to maintain precision of floating-point value
使用"%e"
允许代码区分彼此之间较小的float
,而不是所有都打印"0.000000"
,这是在"%f"
中当|x| < 0.0000005
时的结果。
示例用法:
#include <float.h>
#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);
建议:
在像 buf[FLT_STRING_SIZE*2]
这样的暂存区中,建议使用 2 倍的缓冲区大小。
为了增加鲁棒性,建议使用 snprintf()
。
"%.*g"
。它类似于对值接近 1.0 的指数形式使用 "%f"
,对其他值使用 "%e"
。typedef union{
float a;
char b[4];
} my_union_t;
您可以通过逐字节访问浮点数据值,并将其通过8位输出缓冲区(例如USART)发送,而无需进行强制转换。
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);
// float arr to bytes
int arr_len = 3;
float x[3] = {1.123, 2.123, 3.123};
char* bytes = new char[arr_len * sizeof(float)];
memcpy(bytes, x, arr_len * sizeof(float));
// bytes to float arr
float y[3];
memcpy(y, bytes, arr_len * sizeof(float));
char array[10];
snprintf(array, sizeof(array), "%f", 3.333333);
通过ASCII码将浮点数转换为二进制
float u = 2.154328
string s = to_string(u);
char* p = (char*) s;
这个存储了字符2, .,1, 5, ..., 或者二进制表示 00000010,00101110, 00000001, ...
C
。 - Bruno