如何解决如何解析 AT 命令响应和 C 中输出的字段之一
我试图从 AT 命令响应中捕获数据,但我无法这样做。
我的方法。
函数():
#define MAX_LINE_LENGTH (8 * 1024)
static char buf[MAX_LINE_LENGTH];
static char buf2[MAX_LINE_LENGTH];
static bool tr_lf_cr(const char *s)
{
char *p;
p = strchr(s,'\n');
if (p == NULL || p[1] != '\0') {
return false;
}
*p = '\r';
return true;
}
static void strip_cr(char *s)
{
char *from,*to;
from = to = s;
while (*from != '\0') {
if (*from == '\r') {
from++;
continue;
}
*to++ = *from++;
}
*to = '\0';
}
#define STARTS_WITH(a,b) ( strncmp((a),(b),strlen(b)) == 0)
main()
fd = fopen(*mp,"r+b");
if (fd == NULL) {
/* Could not open the port. */
perror("open_port: Unable to open /dev/ttyUSB0\n");
}
char str = '\n';
strncat(cmd,&str,1);
success = tr_lf_cr(cmd);
if (! success) {
fprintf(stderr,"invalid string: '%s'\n",cmd);
return EXIT_FAILURE;
}
int res = fputs(cmd,fd);
if (res < 0) {
fprintf(stderr,"Failed to send '%s' to modem (res = %d)\n",cmd,res);
return EXIT_FAILURE;
}
do {
line = fgets(buf,(int)sizeof(buf),fd);
if (line == NULL) {
fprintf(stderr,"EOF from modem\n");
return EXIT_FAILURE;
}
strcpy(buf2,line);
strip_cr(buf2);
char delim[] = ",";
char *ptr = strtok(buf2,delim);
printf("\n0++++++++++++++++++++\n");
while (ptr != NULL) {
printf("'%s'\n",ptr);
ptr = strtok(NULL,delim);
}
printf("\n1********************\n");
} while (STARTS_WITH(line,"OK") == 0);
当我运行这个命令时,我得到以下输出AT^HCSQ?
0++++++++++++++++++++
'AT^HCSQ?
'
0++++++++++++++++++++
'^HCSQ: "WCDMA"'
'64'
'64'
'60'
'0
'
0++++++++++++++++++++
'
'
0++++++++++++++++++++
'OK
'
我想要实现的是将每个值与缓冲区分开存储
char p = WCDMA;
int RSSi = atoi[ptr];
[等等...]
我使用 strtok() 来实现这一点,但我无法跳过我从响应中得到的空行。我应该在这里做什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。