如何在C
语言中将float
值转换为char*
?将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
一个更好的选择,因为它保证它永远不会写了缓冲区的你的说法提供了大小2
使用snprintf,以确保没有缓冲区溢出。 – JeremyP 2010-06-07 11:07:01
好主意!我会添加到我的答案... – 2010-06-07 11:09:44
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);
+1,即使它必须指定它是一个GNU扩展afaik。(asprintf是我的意思是GNU分机) – ShinTakezou 2010-06-07 10:55:06
char array[10];
snprintf(array, sizeof(array), "%f", 3.333333);
在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);
在接受答案后很久。
使用sprintf()
或相关函数,因为许多其他人有建议的答案,但使用更好的格式说明符。
使用"%.*e"
,代码解决了各种问题:
所需的最大缓冲区大小是更为合理,喜欢18
sprintf(buf, "%f", FLT_MAX);
可能需要47+。sprintf(buf, "%f", DBL_MAX);
可能需要317+使用
".*"
允许代码来定义区分的float x
字符串版本所需的小数位的数量和其下一个最高float
。对于deatils,见Printf width specifier to maintain precision of floating-point value"%e"
使用允许代码彼此区分小float
做得相当不是所有的打印"0.000000"
其结果|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,最好使用2倍缓冲区大小便笺像buf[FLT_STRING_SIZE*2]
。
为了增强健壮性,请使用snprint()
。
typedef union{
float a;
char b[4];
} my_union_t;
您可以逐字节地访问浮点数据值,并通过8位输出缓冲区(例如USART)发送数据,而无需强制转换。
Upd:不要忘记处理器的排序! – Peter 2016-08-07 11:35:29
- 1. 如何将char *转换为float xcode
- 2. 将char *转换为float或double
- 3. 如何将Char转换为Float
- 4. 将char *转换为char? C++
- 5. Sybase将float从float转换为varchar
- 6. Java将Arraylist <Float>转换为float []
- 7. 将NSData转换为Java float?
- 8. mysql将float转换为double
- 9. 将int转换为float?
- 10. 将Mat转换为** float
- 11. 将float []转换为android.graphics.Matrix
- 12. 将float转换为int
- 13. Haskell将Float转换为Int
- 14. 将FLOAT转换为INT
- 15. 将double转换为float?
- 16. 将Float转换为Int
- 17. JSON将float转换为int
- 18. 将int转换为float/double
- 19. 将float(YYYY)转换为datetime
- 20. 将double [] []转换为float [] []
- 21. *将char转换为main并将* char转换为struct
- 22. 在初始化时,Arduino无法将'float'转换为'const char *'
- 23. 如何将float转换为C中的4字节char?
- 24. 将float 32精确地转换为unsigned short或unsigned char
- 25. 转换为float
- 26. 如何连接char数组元素并将其转换/转换为float?
- 27. char *转换为char *
- 28. 从int,float,char,double的类型转换
- 29. 将NSString *转换为char?
- 30. 将char转换为字节
你需要更具体。你想要什么 - 浮点数的文本表示形式?您可以轻松地传递字节流,并稍后用于重新构建浮点数? – crazyscot 2010-06-07 10:46:55