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

最佳答案

对于任意基,这是一个困难的问题,但是只要你的基是2的幂,简单的朴素算法就可以工作得很好。
strtod(在C99中)支持十六进制浮点,格式与C语言的十六进制浮点常量相同。0x前缀是必需的,p分隔指数,指数以10为基数,表示2的幂。如果您需要支持C99以前的库,您将不会有这样的运气。但既然你也需要2/4/8的基础,那么最好还是自己滚。
编辑:天真算法的大纲:
从一个初始化为0的浮点累加器变量(double或其他任意变量)开始。
从最左边的数字开始,直到处理的每个字符的基点,将累加器乘以基数,然后将字符的值作为数字相加。
在基点之后,启动一个新的running place值变量,最初为1/base。在处理的每个字符上,将数字值乘以位值变量,然后将位值变量除以基数。
如果看到指数字符,请将其后面的数字作为整数读取,并使用标准库函数之一按2的幂缩放浮点数。
如果要处理可能包含过多数字的舍入表单,则必须在步骤2或步骤3中超过有效位置数后计算出该逻辑。否则你可以忽略这一点。

关于c - 基本参数的strtod,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4962573/

10-12 23:31