我不想不必要地重新发明轮子,但我一直在寻找strtod的功能,但具有基本参数(2,8,10,16)。 (我知道strtoul允许一个基本参数,但我正在寻找返回类型double)。任何正确方向的建议/指示?谢谢。
对于任意基数,这是一个难题,但是只要您的基数是2的幂,简单的朴素算法就可以正常工作。
strtod
(在C99中)支持十六进制浮点数,格式与C语言的十六进制浮点常量相同。需要0x
前缀,p
分隔指数,指数以10为底,代表2的幂。如果您需要支持C99之前的库,那么就没有运气了。但是由于您也需要2/4/8的底数,所以最好还是自己动手。
编辑:天真的算法概述:
double
或您喜欢的任何东西开始,初始化为0。如果要处理位数可能过多的舍入表格,则在步骤2或3中超过有效位数后,就必须弄清楚该逻辑。否则,可以忽略该逻辑。
不太可能-我从未见过其他数字基中的浮点数编码为'小数'。