带有基本参数的strtod

时间:2011-02-10 20:55:37

标签: c ansi

我不想不必要地重新发明轮子,但我一直在寻找strtod的功能,但有一个基本参数(2,8,10,16)。 (我知道strtoul允许一个基本参数,但我正在寻找返回类型double)。有正确方向的建议/指示吗?感谢。

2 个答案:

答案 0 :(得分:2)

对于任意基数,这是一个难题,但只要您的基数是2的幂,纯朴的算法就可以正常工作。

strtod(在C99中)支持与C语言的十六进制浮点常量相同格式的十六进制浮点数。需要0x前缀,p分隔指数,指数位于基数10并表示2的幂。如果您需要支持C99之前的库,那么您将没有这样的运气。但是既然你也需要2/4/8的基础,那么无论如何最好自己动手。

编辑:天真算法的大纲:

  1. 从浮点累加器变量(double或其他任何内容,根据您的喜好)开始,初始化为0.
  2. 从最左边的数字开始,直到小数点,对于你处理的每个字符,将累加器乘以基数,并将字符的值作为数字加上。
  3. 小数点后,启动一个新的运行位置值变量,最初为1 / base。在您处理的每个字符上,将数字值乘以place-value变量,然后将place-value变量除以base。
  4. 如果看到指数字符,请将其后面的数字作为整数读取,并使用其中一个标准库函数将浮点数除以2的幂。
  5. 如果您想要处理可能会过多的数字形式的表格,一旦超过步骤2或3中的重要位数,您必须计算出该逻辑。否则您可以忽略它。

答案 1 :(得分:0)

不太可能 - 我从未见过在其他数字基础上编码为'小数'的浮点数。