将 float 转换为 char*
如何使用 C
语言将 float
值转换为 char*
?
How can I convert a float
value to char*
in C
language?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何使用 C
语言将 float
值转换为 char*
?
How can I convert a float
value to char*
in C
language?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
这会将
myFloat
的字符串表示形式存储在myCharPointer
中。不过,请确保绳子足够大以容纳它。snprintf
是比sprintf
更好的选择,因为它保证它永远不会写入超过您在参数 2 中提供的缓冲区的大小。That will store the string representation of
myFloat
inmyCharPointer
. Make sure that the string is large enough to hold it, though.snprintf
is a better option thansprintf
as it guarantees it will never write past the size of the buffer you supply in argument 2.在阿杜诺中:
In Arduino:
sprintf:(来自 MSDN)
sprintf: (from MSDN)
接受答案后很久。
使用 sprintf() 或相关函数,正如许多其他人建议的答案一样,但使用更好的格式说明符。
使用
"%.*e"
,代码解决了各种问题:使用
"%.*e"
所需的最大缓冲区大小更为合理,例如 18浮动
(见下文)。对于"%f"
(认为定点),sprintf(buf, "%f", FLT_MAX);
可能需要 47+字符
。sprintf(buf, "%f", DBL_MAX);
可能需要 317+char
。使用
".*"
允许代码定义区分float x
的字符串版本和它的下一个最大float
所需的小数位数代码>.有关详细信息,请参阅 printf 宽度说明符以保持浮动精度- 点值使用
"%e"
允许代码区分小浮点数
,而不是全部打印"0.000000"< /code> 这是
|x| 时的结果< 0.0000005
与“%f”
。用法示例:
想法:
IMO,最好对暂存器使用 2 倍缓冲区大小,例如
buf[FLT_STRING_SIZE*2]
。为了增强鲁棒性,请使用
snprintf()
。作为第二种选择,请考虑
“%.*g”
。对于指数接近 1.0 的值,它类似于"%f"
;对于其他值,类似于"%e"
。Long after accept answer.
Use
sprintf()
, or related functions, as many others have answers suggested, but use a better format specifier.Using
"%.*e"
, code solves various issues:The maximum buffer size needed is far more reasonable with
"%.*e"
, like 18 forfloat
(see below). With"%f"
, (think fixed-point),sprintf(buf, "%f", FLT_MAX);
could need 47+char
.sprintf(buf, "%f", DBL_MAX);
may need 317+char
.Using
".*"
allows code to define the number of decimal places needed to distinguish a string version offloat x
and it next highestfloat
. For details, see printf width specifier to maintain precision of floating-point valueUsing
"%e"
allows code to distinguish smallfloat
s from each other rather than all printing"0.000000"
which is the result when|x| < 0.0000005
with"%f"
.Example usage:
Ideas:
IMO, better to use 2x buffer size for scratch pads like
buf[FLT_STRING_SIZE*2]
.For added robustness, use
snprintf()
.As a 2nd alterative consider
"%.*g"
. It is like"%f"
for values exponentially near 1.0 and like"%e"
for others.您可以逐字节访问浮点数据值,并将其通过 8 位输出缓冲区(例如 USART)发送,而无需进行转换。
You can access to float data value byte by byte and send it through 8-bit output buffer (e.g. USART) without casting.
通过 ascii 代码将浮点数转换为二进制
这存储字符 2, .,1, 5, ...,
或二进制
00000010,00101110, 00000001, ...
Convert float to binary via ascii codes
This stores the characters, 2, .,1, 5, ...,
or in binary
00000010,00101110, 00000001, ...