打印
[ZLG-ARM]

【求助】在ads中如何将字符串转化为float等数值类型?

[复制链接]
2764|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arzhiy|  楼主 | 2007-4-6 09:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
high| | 2007-4-6 10:13 | 只看该作者

stdlib.h

atof()
strtod()

浮点得小心使用。

使用特权

评论回复
板凳
rockos| | 2007-4-6 10:14 | 只看该作者

re

ads提供的浮点数转换函数有些小bug, printf/atof都有问题, 你得自己写一个.

从字符串向浮点数的转换也就简简单单不足百行, 如果这个都伸手给人要的话就有点太“那个”了……

使用特权

评论回复
地板
arzhiy|  楼主 | 2007-4-6 10:55 | 只看该作者

哈哈


1、首先谢谢二楼的帮助
  可以用,只是我希望对于如果字符串中有多个非数值字符时需要报错,例如“-20.63ab”为错误的,而上面两个函数均输出-20.6300。

2、再谢谢三楼的批评
    不过对于现在很多有现成的库和函数的程序,我认为无需自己编写,可以有更多的时间做别的。我以前一直自己编写数字转字符串的函数,后来有网友告诉我可以用sprintf,用了之后发现很不错的。

使用特权

评论回复
5
rockos| | 2007-4-6 11:06 | 只看该作者

re

ADS库中的浮点<->文本转换函数都有问题, 你可以在板上试一下代码片断:

char buff[128];
sprintf(&buff[0], "%f", 3.14159);
printf("%02x %02x %02x %02x %02x %02x %02x ");



char buff[128]="3.14159";
double val;
val = 100000. * atof(&buff[0]);
printf("%d", val);

注意一定要在ARM板上跑, 不要使用simulator(使用armsimulator运行以上代码不会有任何问题, 因为armsimulator上使用了不同的浮点实现).

如果我没有记错, 第一个片断的结果应当是:
33 5e 31 34 31 35 39
小数点(ASCII 0x2E)变成其它值了.

第二个片断的结果应当是:
300000
小数点后的值会被全部截断.

使用特权

评论回复
6
arzhiy|  楼主 | 2007-4-6 11:17 | 只看该作者

re rockos


rockos:
    你上面printf函数是自己编写的还是用的stdio.h中的?这个函数我在使用中是自己编写的

使用特权

评论回复
7
high| | 2007-4-6 11:21 | 只看该作者

rocket

注意编译选项,获得浮点库支持

使用特权

评论回复
8
high| | 2007-4-6 11:21 | 只看该作者

rocket

注意编译选项,获得浮点库支持

使用特权

评论回复
9
rockos| | 2007-4-6 12:00 | 只看该作者

.


to high, 在ADS中使用浮点函数不需要显式地指定浮点库, 但是gcc需要, 估计你用gcc用惯了.

to arzhiy, 自己试一下就知道你的printf是不是也有类似的问题, 这个问题明显是ADS库的bug.

使用特权

评论回复
10
high| | 2007-4-6 14:12 | 只看该作者

ads1.2默认的是-fpu none

记得一共8个选项,我想你可以尝试一下。手册里面有详细描述。

----
我想,标准库出错的机会很小,何况这么明显的错误。

使用特权

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

本版积分规则

11

主题

64

帖子

1

粉丝