如何过滤部分字符

How can I filter a part of my char

本文关键字:字符 过滤 何过滤      更新时间:2023-10-16

我有一个char buffer[200];,它的内容是(Serial.println(buffer)的输出):

AT+CGPSINF=2
2,195941,4613.161699,N,608.476854,E,1,9,1.398636,435.450073,M,48.200287,M,,0000
OK

我只想在char fix[]中有这个

2,195941,4613.161699,N,608.476854,E,1,9,1.398636,435.450073,M,48.200287,M,,0000

我花了很多时间处理这个代码,但没有成功

static int gps_read () {
  read_AT_string("AT+CGPSINF=2",3000);
  Serial.println(F("------- Show buffer------"));
  Serial.println(buffer);
  Serial.println(F("-------------------------n"));
  char fix[BUFFERSIZE];
  int z = 0;
  int y = 0;
  int w = 0;
  for(y=0; y < BUFFERSIZE; y++)
  {
    if(buffer[y]==',') z++;
    if(z > 0){
      if(buffer[y] == 'n') break;
      fix[w] = buffer[y];
      w++;
    }
    //if(y==num)//if the command is right, run return
    //  y=strlen(buffer)+1;
  }
  Serial.println(F("------- Show Fix------"));
  Serial.println(fix);
  Serial.println(F("----------------------"));

我如何用看起来像的行填充和调整char fix[]的大小

21959414613.161699,N,608.476854,E,1.9,1.398636435.450073,M,48.200287,M,,0000

在我上面的代码中,它打印出:

------- Show Fix------
,202653,4613.164908,N,608.479232,E,1,9,1.183249,427.253052,M,48.200226,M,,0000
b
----------------------

我输了第一个'2'
应该删除换行符、"b"和空格。

我这样解决,但我不满意。

char* gps_read (void) {
  if(strstr(read_AT_string("AT+CGPSINF=2",3000),"OK") != NULL)
  {
    Serial.println(F("------- Show buffer------"));
    Serial.println(buffer);
    Serial.println(F("-------------------------n"));
    char fix[BUFFERSIZE];
    int z = 0;
    int y = 0;
    int w = 0;
    for(y=0; y < BUFFERSIZE; y++)
    {
      if(buffer[y]==',') z++;
      if(z > 0){
        if(buffer[y] == 'n'){
          fix[w-1]='';
          break;
        }
        fix[w] = buffer[y+1];
        w++;
      }
    }
    Serial.println(F("------- Show Fix------"));
    Serial.println(fix);
    Serial.println(F("----------------------"));
    return fix;
  }
  else
  {
    return "Error : no fix";
  }
}

"2"并不重要,它不是显示。你怎样才能做得更好?