10117|12

333

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

怎么用C程序提取一个数组中指定的一段字符? [复制链接]


上图中红线划出来的是返回到我单片机RXBUF中的IP地址,我想就把ip提取出来,把前面的%DNSR不要,这个程序怎么写啊?

最新回复

你返回一个临时指针,在函数结束的时候中间变量会被释放,你什么都获取不到。 如果你数据会改变,如上面几位所说,你可以寻找%DNSR:,或者找到“:”,去取后面的IP,不知道对你有没有帮助  详情 回复 发表于 2014-8-30 11:17
 
点赞 关注

回复
举报

420

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
解析啊,字符匹配,去掉不想要的,留下想要的就可以了。

点评

我只有个大概思路,细节把握不准,编译起来都是错误,不知道从哪里下手改起,恳请高手赐教成熟程序  详情 回复 发表于 2014-8-24 12:52
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
armcu 发表于 2014-8-24 12:13
解析啊,字符匹配,去掉不想要的,留下想要的就可以了。

我只有个大概思路,细节把握不准,编译起来都是错误,不知道从哪里下手改起,恳请高手赐教成熟程序

点评

有思路就把程序写出来,不要怕有错误,有错误把代码贴出来大家帮你找。一上来就直接要成熟代码,一个别人不一定有时间给你写,另外自己什么时候才能进步?  详情 回复 发表于 2014-8-24 14:55
 
 
 

回复

420

帖子

0

TA的资源

一粒金砂(高级)

4
 
面纱如雾 发表于 2014-8-24 12:52
我只有个大概思路,细节把握不准,编译起来都是错误,不知道从哪里下手改起,恳请高手赐教成熟程序

有思路就把程序写出来,不要怕有错误,有错误把代码贴出来大家帮你找。一上来就直接要成熟代码,一个别人不一定有时间给你写,另外自己什么时候才能进步?

点评

有点错误,修改下后: uchar Get_ip(uchar *a) { int i,j; uchar b[]; for(i=6;a!='\0';i++; { b[j++]=a-'0'; } return b[j]; }  详情 回复 发表于 2014-8-24 16:25
uchar Get_ip(uchar *a) { int i,j; uchar b[]; for(i=6;a!='0';i++) { b[j++]=a-'0'; } return b[j]; } 我对这个数组b[]没把握,而且虽然我可以把提取到的字符-'0'得到数,但是会影  详情 回复 发表于 2014-8-24 16:18
 
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

5
 
armcu 发表于 2014-8-24 14:55
有思路就把程序写出来,不要怕有错误,有错误把代码贴出来大家帮你找。一上来就直接要成熟代码,一个别人 ...


uchar Get_ip(uchar *a)
{
   int i,j;
   uchar b[];
   for(i=6;a!='0';i++)
  {
   b[j++]=a-'0';
  }
  return b[j];
}

我对这个数组b[]没把握,而且虽然我可以把提取到的字符-'0'得到数,但是会影响到那个ip中的点,这怎么解决?
 
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

6
 
上面那个for(i=6;a[i]!='\0';i++)
 
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

7
 
armcu 发表于 2014-8-24 14:55
有思路就把程序写出来,不要怕有错误,有错误把代码贴出来大家帮你找。一上来就直接要成熟代码,一个别人 ...

有点错误,修改下后:
uchar Get_ip(uchar *a)
{
   int i,j;
   uchar b[];
   for(i=6;a!='\0';i++;
  {
   b[j++]=a-'0';
  }
  return b[j];
}


点评

你的字符串格式是不是固定的,也就是说是不是一定按照你的红色的字符串的格式?如果是:首先你要先检测到 %DNSR:有这几个字符才能确定后面的是你所需要的IP。 另外你的数组定义方法:uchar b[]; 有问题,还是加上  详情 回复 发表于 2014-8-24 17:50
 
 
 

回复

24

帖子

0

TA的资源

一粒金砂(中级)

8
 
a是红色标出来的那串字符指针,ip是你存储IP地址的指针,用于返回IP数据,数组要定义足够存储IP地址的最大长度LENGTH_IP_BUFFER=15,这样才能保证数据不越界。
不知道是不是你想要的。

void Get_ip(uchar *a,uchar *ip)
{
   int i;
   for(i=6;a[i]!='\0';i++)
  {
       if(i-6        {
       if(a[i]=='.')
       {
           *ip='.';
       }
       else
       {
            *ip=a[i]-'0';
       }
       ip++;
       }
  }
}

点评

#pragma vector = UART0RX_VECTOR __interrupt void UART0_RXISR(void) { RxBuf[RxPoint++]=RXBUF0; //取出回显 } 我这个接收中断能不能接收到回显?  详情 回复 发表于 2014-8-24 20:37
我调用函数是这样:Get_ip(RxBuf,IP); 里面两个数组定义是这样的: #define LENGTH_IP_BUFFER 15 uchar IP[LENGTH_IP_BUFFER]={0}; #define RxBuf_N 25 uchar RxBuf[RxBuf_N]={0}; 这样对不对? 运行起来从  详情 回复 发表于 2014-8-24 20:03
 
 
 

回复

420

帖子

0

TA的资源

一粒金砂(高级)

9
 
面纱如雾 发表于 2014-8-24 16:25
有点错误,修改下后:
uchar Get_ip(uchar *a)
{

你的字符串格式是不是固定的,也就是说是不是一定按照你的红色的字符串的格式?如果是:首先你要先检测到 %DNSR:有这几个字符才能确定后面的是你所需要的IP。
另外你的数组定义方法:uchar b[]; 有问题,还是加上数组长度吧
 
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

10
 
kandy11 发表于 2014-8-24 17:14
a是红色标出来的那串字符指针,ip是你存储IP地址的指针,用于返回IP数据,数组要定义足够存储IP地址的最大 ...

我调用函数是这样:Get_ip(RxBuf,IP);
里面两个数组定义是这样的:
#define LENGTH_IP_BUFFER 15
uchar IP[LENGTH_IP_BUFFER]={0};
#define RxBuf_N 25
uchar RxBuf[RxBuf_N]={0};
这样对不对?
运行起来从串口看好像没有获取到IP..........
 
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

11
 
kandy11 发表于 2014-8-24 17:14
a是红色标出来的那串字符指针,ip是你存储IP地址的指针,用于返回IP数据,数组要定义足够存储IP地址的最大 ...

#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{     
  RxBuf[RxPoint++]=RXBUF0;  //取出回显   
}
我这个接收中断能不能接收到回显?
 
 
 

回复

24

帖子

0

TA的资源

一粒金砂(中级)

12
 
如armcu所说,可以在函数中判断一下 %DNSR:作为确认,也可以在外部判断。
你首先得看是否有串口数据发送出来,然后再看你的接送是否正确了,不正确就要从最底层调起了。
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

13
 
你返回一个临时指针,在函数结束的时候中间变量会被释放,你什么都获取不到。
如果你数据会改变,如上面几位所说,你可以寻找%DNSR:,或者找到“:”,去取后面的IP,不知道对你有没有帮助
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表