寻找snprintf() - 替换

时间:2018-05-08 07:36:48

标签: c floating-point embedded printf

我想将float(例如f = 1.234)转换为char数组(例如s =" 1.234")。使用snprintf()这很容易,但由于某些尺寸和性能原因,我无法使用它(它是一个嵌入式平台,snprintf()太慢,因为它在内部使用双打)。

那么:我如何轻松地将float转换为char-array(正浮点数和负浮点数,没有指数表示,点后最多三位数)?

谢谢!

PS:澄清一下:平台附带一个NEON FPU,它可以在硬件中进行32位浮点运算,但是64位双精度运行速度慢。遗憾的是,这个平台的C库没有snprintf的特定NEON / float变体,所以我需要更换。除此之外,完整的snprintf / printf-stuff会增加代码大小

1 个答案:

答案 0 :(得分:1)

对于许多微控制器,可以使用没有浮动/双重支持的简化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位平台上的整数溢出。

CNC中 此外,正如评论所述,圆角案例将提供与printf实施不同的答案。