strtod with base parameter

问题描述 投票:1回答:2

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

c c89 strtod
2个回答
2
投票

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

strtod(在C99中)支持十六进制浮点数,格式与C语言的十六进制浮点常量相同。需要0x前缀,p分隔指数,指数以10为底,代表2的幂。如果您需要支持C99之前的库,那么就没有运气了。但是由于您也需要2/4/8的底数,所以最好还是自己动手。

编辑:天真的算法概述:

  1. 从浮点累加器变量(double或您喜欢的任何东西开始,初始化为0。
  2. 对于要处理的每个字符,从最左边的数字开始,直到小数点,将累加器乘以基数,然后将字符的值作为数字相加。
  3. 小数点后,开始一个新的运行中的位置值变量,最初为1 / base。在处理的每个字符上,将数字值乘以位置值变量,然后将位置值变量除以基数。
  4. 如果看到指数字符,则将其后面的数字作为整数读取,并使用标准库函数之一以2的幂来缩放浮点数。

如果要处理位数可能过多的舍入表格,则在步骤2或3中超过有效位数后,就必须弄清楚该逻辑。否则,可以忽略该逻辑。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.