没有strtod / sprintf的浮点转换

时间:2013-07-23 14:20:02

标签: c string floating-point

由于我决定在一个应该在Windows和Linux上运行的程序内部使用UTF-16,我需要替换一些字符串处理函数,因为我不想为用户转换为本机char表示和从本机char表示转换模式代码。但是,如果浮点转换比运行iconv慢,我可以使用strtod / sprintf周围的包装器 WINE做到了。

1 个答案:

答案 0 :(得分:3)

这些与小数的转换很难快速正确。天真(但正确)的版本假设多精度整数,你可能没有计划的实现取决于。简而言之,包装现有的stdtod / sprintf并且不用担心开销,这将比使用这些函数的天真实现时的性能损失小。

在“天真不正确”类别中,当主机缺少一个解释器时,所有解释器都会使用implementation of strtod()。这个实现非常糟糕(可能会有几个ULPs返回结果),但是如果你不介意的话,可以调整这段代码来操作UTF-16字符。


注意:我认为C99中有一个swprintf(),但它适用于wchar_t的字符串,不一定是UTF-16,所以这可能不适合你。