cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1604|回复: 6

字符串提取出错

[复制链接]
发表于 2008-11-18 15:11:57 | 显示全部楼层 |阅读模式
我在用RS232通信后收回来的是一个长的字符串"@00WD0000010002000300050006…000A…000F……0025*\r"字符串间是一串4位的数据,从“0001”到“0025”共有25个数据,我现在是想把这个字符串里面的数据提取出来,从字符串的第7位开始,然后4位4位(4位字符)地提取,如第一个提取出来的是“0001”,第二个是“0002”直到第25个“0025”到*就结束,因为每4位的数据是16进制的数据。
我运行的与printf输出的不一致,不知道是什么原因,请高手指点!
程序见附件!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2008-11-19 09:55:01 | 显示全部楼层
按照你的排序规则,从“0001”到“0025”共有37个数据(0X25=37);
另外,你的源码中SetCtrlVal (panelHandle,PANEL_STRING_2 ,a[0]);等语句中a[0]、a[3]等的用法不对,在c语言中数组的下标和数组指针是等价的,
a[0]等价于*a,表示数组的起始地址,即指整个数组;
a[3]表示从数组的第四个元素直到数组结尾。
 楼主| 发表于 2008-11-19 10:28:30 | 显示全部楼层
多谢netcreature !
解决了,把a[25][4]改为a[25][5]就不会溢出了。
再问一个问题,我通过 Fmt(&b
, "%x<%s", a);十六进制字符串转成整数之后,想把整数再转成浮点数,为什么下面语句不行,有没有什么更好的方法。
Fmt(&c
,"%f<%x",b);


[ 本帖最后由 xiaowei86 于 2008-11-19 10:33 编辑 ]
发表于 2008-11-19 10:50:40 | 显示全部楼层
b和c变量是怎么定义的?为什么要加上取地址运算符?
 楼主| 发表于 2008-11-19 10:58:52 | 显示全部楼层
char a[25][5];
int i;
int b[25];
float c[25];

因为我显示数据要float的,想把整数转成float,然后显示出来。

[ 本帖最后由 xiaowei86 于 2008-11-19 11:00 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2008-11-19 11:36:22 | 显示全部楼层
int i=0;
char a[25][5];
double c[25];

for(i=0;i<25;i++)
    Scan (a, "%s>%f", &c);

......

(奇怪!怎么输入方括号不显示了!?)

[ 本帖最后由 netcreature 于 2008-11-19 11:42 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2008-11-19 13:39:35 | 显示全部楼层
哈哈!我今天早上也纳闷,换了几种方法次都还是这样。
多谢版主了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-20 17:13 , Processed in 1.013633 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表