gpt4 book ai didi

c - 寻找 snprintf()-替换

转载 作者:行者123 更新时间:2023-12-02 02:54:33 24 4
gpt4 key购买 nike

我想将浮点数(例如 f=1.234)转换为字符数组(例如 s="1.234")。使用 snprintf() 非常简单但由于某些尺寸和性能原因,我不能使用它(它是一个嵌入式平台,snprintf() 太慢,因为它在内部使用 double )。

那么:如何轻松地将浮点数转换为字符数组(正负浮点数,无指数表示,点后最多三位数字)?

谢谢!

PS:澄清这一点:该平台带有一个 NEON FPU,它可以在硬件中进行 32 位浮点运算,但对于 64 位 double 运算速度很慢。不幸的是,这个平台的 C 库没有 snprintf 的特定 NEON/float 变体,所以我需要一个替换。除此之外,完整的 snprintf/printf-stuff 会过多地增加代码大小

最佳答案

对于许多微 Controller ,可以使用没有浮点/ double 支持的简化 printf 函数。例如,许多平台都有 newlib nano 和 texas 仪器提供 ustdlib.c .

使用其中一个非浮点 printf 函数,您可以将打印拆分为仅使用整数的东西,例如

float a = -1.2339f;
float b = a + ((a > 0) ? 0.0005f : -0.0005f);
int c = b;
int d = (int)(b * 1000) % 1000;
if (d < 0) d = -d;
printf("%d.%03d\n", c, d);

哪个输出
-1.234

请注意 8 位和 16 位平台上的整数溢出。

-编辑-
此外,正如评论所言,圆角案例将提供与 printf 不同的答案。的实现。

关于c - 寻找 snprintf()-替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50228328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com