C 带基本参数的strod
我不想不必要地重新发明控制盘,但我一直在寻找strtod的功能,但有一个基本参数(2,8,10,16)。(我知道strtoul允许一个基本参数,但我正在寻找返回类型double)。有没有正确方向的建议/指针?谢谢。不太可能-我从未见过在其他基数中被编码为“小数”的浮点数。对于任意基数,这是一个很难解决的问题,但只要基数是2的幂,简单的朴素算法就可以很好地工作C 带基本参数的strod,c,c89,strtod,C,C89,Strtod,我不想不必要地重新发明控制盘,但我一直在寻找strtod的功能,但有一个基本参数(2,8,10,16)。(我知道strtoul允许一个基本参数,但我正在寻找返回类型double)。有没有正确方向的建议/指针?谢谢。不太可能-我从未见过在其他基数中被编码为“小数”的浮点数。对于任意基数,这是一个很难解决的问题,但只要基数是2的幂,简单的朴素算法就可以很好地工作 strod(在C99中)支持与C语言的十六进制浮点常量格式相同的十六进制浮点0x前缀是必需的,p分隔指数,指数以10为基数,表示2的幂。如
strod
(在C99中)支持与C语言的十六进制浮点常量格式相同的十六进制浮点0x
前缀是必需的,p
分隔指数,指数以10为基数,表示2的幂。如果您需要支持C99之前的库,那么您就没有这样的运气了。但既然你也需要2/4/8的基数,那么你最好还是自己滚吧
编辑:朴素算法概述:
double
或其他任何变量)开始如果您想要处理可能包含太多数字的四舍五入表单,那么在第2步或第3步中,一旦超过有效位数,就必须计算出该逻辑。否则您可以忽略这一点。相反,十六进制浮点是C标准的一部分。另外值得注意的是,为了高效地存储精确的浮点值,也为了避免由于其他软件中的错误而读回错误值的风险,当打印为文本时,你应该总是把浮动存储在两个基数中。@它们是在C99标准中,而不是C++。即使在C语言中,它们也非常罕见。谢谢。我相信我会对浮点部分使用我自己的函数,并将整数部分传递给strtol,然后将结果加在一起,这样我就可以继续使用C89了。实际上,这不起作用。如果该值太大,无法放入
long
,它将失败。请参阅我的更新,了解如何实现“naive算法”。