linux 串口 字符 间隔,嵌入式linux编程过成中模块从串口读数须要特定的字符段而且须要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)...

"该博客主要介绍了在嵌入式Linux环境中,如何从串口读取Zigbee模块的数据。通过查找特定字符段"fe"到"ff"之间的内容,提取出中间的字符串,然后将每两个字符转换为一个16进制数。程序实现了字符串到16进制数组的转换,并展示了在VC环境下运行的结果。"
摘要由CSDN通过智能技术生成

嵌入式linux编程过成中用到zigbee模块linux

zigbee从串口读数须要特定的字符段而且须要每两位字符数组元素转换成一个16进制数编程

(提取特定字符串+字符串转16进制)数组

#include

#include

#include

#include

int serchzig(char *rdbuf,unsigned char *wtbuf)

{

char *beginbuf = NULL;

char *endbuf = NULL;

char midbuf[100]={0};

char str[4]={0};

//将主函数传入的buffer数组中fe~ff提取到midbuf中

beginbuf = strstr(rdbuf,"fe");

endbuf = strstr(rdbuf,"ff");

if(beginbuf == NULL || endbuf == NULL || beginbuf > endbuf)

{

printf("not found zigbee cmd!\n");

}

else

{

endbuf += strlen("ff");

strncpy(midbuf,beginbuf,endbuf-beginbuf);

}

printf("%s\n",midbuf);

//将midbuf中的字符每两个数组元素(即两个字符)转换为一个16进制数,并存入wtbuf[i]中。

int len = strlen(midbuf);

printf("%d\n",len);

//midbuf[len+1]='\0';

//printf("%d\n",len);

memset(str,0,sizeof(str));

int i = 0;

int j = 0;

for(j=0;j < len;j += 2)

{

strncpy(str,midbuf+j,2);

//memcpy(str,midbuf+j,2);

printf("str = %s\t",str);

wtbuf[i] = strtol(str,NULL,16);

printf("wtbuf[i] = 0x%02x\t i= %d\n",wtbuf[i],i);

memset(str,0,sizeof(str));

i++;

}

return 0;

}

int main()

{

char buffer[100]={"hellow zigbee fe1985ffdf"};//定义一个字符数组,并赋值

unsigned char zigbee[100]={0};//无符号数组/也可定义为char,不然打印可能出现6个f,是printf补码的问题,

//char *beginbuf = NULL;

//char *endbuf = NULL;

//char buff[100] = {0};

serchzig(buffer,zigbee);//调用函数,输出的zigbee数组已是转换好的数组

printf("%s\n",zigbee);

printf("%x\n",zigbee[0]);

printf("%x\n",zigbee[1]);

printf("%x\n",zigbee[2]);

printf("%x\n",zigbee[3]);

printf("%x\n",zigbee[4]);

return 0;

}

运行结果:vc运行的。arm-linux还结合了串口,程序不能通用就用vc专门编写了一个例子函数

e3082c544b402ff1bf567d3d83af27e6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值