打印
[AVR单片机]

请教大家:如何将“字符串”转换为“浮点数”?(在mega16

[复制链接]
5424|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lionwes|  楼主 | 2007-2-16 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ATmega8515| | 2007-2-16 21:49 | 只看该作者

C库函数应该有。

C库函数应该有。
“浮点数”转“字符串”可以用sprintf()函数。





使用特权

评论回复
板凳
AA_55| | 2007-2-21 09:53 | 只看该作者

应该使用专门的转换函数实现

不要使用printf()函数族的函数来实现。printf()函数用起来看上去方便,但是开销很大,在单片机领域中不适合使用。

C99标准中,浮点数和字符串之间转换函数对是atof()和strtof(),另外还有strtod(),看你所需要的转换结果类型以及使用的编译器对标准支持的情况而用

使用特权

评论回复
地板
lionwes|  楼主 | 2007-2-25 13:45 | 只看该作者

谢谢 音乐乐乐

十分感谢 音乐乐乐 ^_^

使用特权

评论回复
5
AA_55| | 2007-2-25 14:37 | 只看该作者

大家是不是没有熟读库函数的习惯?

我列出的就是字符串转换成浮点类型数据的库函数,不过在写贴子时候有笔误。

说得再罗嗦、详细点,atof()是把字符串转换成双精度浮点数;
strtof()是把字符串换成float型的浮点数,而strtod()是把字符串转换成double型的浮点数。后两者是C99新定义的,主要是完善了atof()函数。atof()是早期的转换工具函数,如果字符串不是合法的浮点数,返回值是不确定的;而后两者则增加了错误检测和指示,使用它们能使代码更健壮,当然占用的开销也比atof()大。

C语言的库函数很丰富,要熟悉它们,以便应用。库函数比自行编写的功能函数更稳定可靠,运行效率更高。不建议用自行编写的函数替代库函数。

使用特权

评论回复
6
音乐乐乐| | 2007-2-26 19:59 | 只看该作者

8错,在VC里老用atof,不知道这个库函数大小如何

使用特权

评论回复
7
AA_55| | 2007-2-27 09:03 | 只看该作者

atof()是标准库函数

除非一个库函数编写的太滥,否则不可能比用户编的更差。不过多数商业软件既然敢拿出来卖钱,肯定是有自己的优点的,我们应该利用前人已有的成果,而不应该做简单的重复劳动。

atof()这个函数GCC AVR是支持的,应用在mega芯片上,没有问题。另外一个贴子楼主提问的问题,还是存在类似情况。楼上建议自己编写函数不可取,GCC AVR也是支持的C函数库是支持浮点类型转换到字符串的,函数是dtostre()。不建议用sprintf(),是因为这个函数主要是为了输出格式化字符串的。不要小看这些格式控制功能,为了能很好地适应各种格式控制情况,函数需要传递并处理大量的格式控制符,这大大地占用了资源,降低了效率,唯一的好处是使用方便。但是单片机不同于台式计算机,资源一向是很紧张的,哪有那么多资源给这个臃肿的函数去浪费?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

18

帖子

0

粉丝