我的应用程序需要将双精度值转换为 char* 以写入仅接受字符的管道。执行此操作的常用方法是使用 sprintf() 函数或使用 iomanip.h 头文件中的 ostringstream 。
事实证明,这两者的表现都非常糟糕。而且我的应用程序需要经常进行这种转换,以至于它成为主要的瓶颈。
还有其他我可以使用的功能吗?我可以使用什么逻辑来编写高效的转换函数?到目前为止,我唯一能想到的就是使用除法和 mod 操作来获取每个单独的数字,并将这些数字附加到 char* 以获得整个 double 值。不过,这似乎不是一个好方法,而且本身性能可能会很差。
提前感谢您的想法。
编辑:关于如何使用 char* 存在一些混淆。 char* 将是写入管道的 fwrite 函数的参数。
原文由 Shailesh Tainwala 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您想打印 double 类型可以支持的任何数字,请使用那里的任何库来完成这项工作。它可以帮助您保持理智: 为什么“dtoa.c”包含这么多代码?
如果您想以 double 类型打印数字的子集。例如,小数点后最多4位,小数点前不超过5位,则可以将数字四舍五入并转换为int类型,然后再使用除法和mod打印出来。我可以确认这种方法的性能。
编辑: 如果您最初的目的是发送数据进行通信,那么发送 double 的二进制形式将是最快和最准确的方法(不会因转换而损失精度)。其他答案中解释了这样做的方法。