创客集结号分享arduino简单的字符串分割方法

xk100_com 2018-08-03 03:00:39
据创客集结号了解,使用arduino和其他板子通讯时经常需要处理各种数据来获得函数,这里给大家分享个简单的字符串分割方法。
代码如下:
//一个简单的规律的字符串,用逗号做分割符
char *str="123,456,789,abc,";
/*
dst 保存分割好的数据的数组
str 被分割的字符串
spl 分割符
*/
int split(char dst[][5], char* str, const char* spl)
{
int n = 0;
char *result = NULL;
result = strtok(str, spl);

while( result != NULL )
{
strcpy(dst[n++], result);
result = strtok(NULL, spl);
}
return n;
}

void setup()
{
Serial.begin(9600);

char dst[5][5];

Serial.println("split string...");

int cnt = split(dst, str, ",");

for (int i = 0; i < cnt; i++)
Serial.println(dst[ i]);}

void loop()
{

}

当然这个一个规律的字符串分割起来也比较简单,很多时候我们遇到的是不规律的字符串,我们可以通过查找关键词的方式来分割。
代码如下:
//har *str="?&data=123&res=abcd\r\n";

/*
str 被查找的字符串
b_str 对比的字符串头
e_str 查找的结束符
dest 获取到的字符串
len 想要获取的长度
*/
char *parse_str(char *str, char * b_str, char *e_str, char *dest, int len) {
char *pos, *p, *p2;
int i;
pos = strstr(str, b_str);
if (pos == NULL) {
return NULL;
}
pos = pos + strlen(b_str);
p = pos;
if (e_str == NULL) {
p2 = NULL;
} else {
p2 = strstr(str, e_str);
}
if (p2 == NULL) {
p2 = str + strlen(str);
}
i = 0;
for (i = 0; p < p2 && (*p) && i < len; dest[i++] = *p, ++p)
;
dest = 0;
return dest;
}

void setup()
{
Serial.begin(9600);
//初始化保存获取到的数据的数组,并把内存置为0
char data[5]; memset(data,0x00,sizeof(data));
char res[5]; memset(res,0x00,sizeof(res));

Serial.println("parse_str string...");

parse_str(str,"data=","&res",data,5);
Serial.println(data);

parse_str(str,"res=","\r\n",res,5);
Serial.println(res);
}

void loop()
{

}
若想学习更多arduino知识和教程,可搜索创客集结号或xk100com。
...全文
1005 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

488

社区成员

发帖
与我相关
我的任务
社区描述
硬件使用 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧