C-无LF CR的过程传入串行流



以下代码一次处理传入的RS232序列数据1字符,并且正常工作。

但是,在我的用例中,传入的串行供稿不包含任何CR或LF字符,这些字符使进一步的划界/处理变得困难。最终定界符永远是一个!感叹号而不是CR或LF。例如123456!abcdef!qwerty!

是否可以修改下面的代码来替换!CR的角色(马车返回)?例如,传入的字符串是123456abcdef!然后程序应替换!使用CR,它将输出123456abcdef<马车返回>

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
  for (;;)
  {
    putchar (serialGetchar (fd)) ;
    fflush (stdout) ;
  }
}

您可以以相同的单一字符为基础:

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
  for (;;)
  {
    char c = serialGetchar (fd);
    putchar (c == '!' ? 'r' : c) ;
    fflush (stdout) ;
  }
}

通常,它被带有带托架返回的新线路,在这种情况下是:

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
  for (;;)
  {
    char c = serialGetchar (fd);
    if (c == '!')
    {
        putchar ('r') ;
        putchar ('n') ;
    }
    else
    {
        putchar (c) ;
    }
    fflush (stdout) ;
  }
}
char c = serialGetchar (fd)) ;
c = (c == '!') ? 'r' : c ;
putchar (c) ;

或换句话说,

char c = serialGetchar (fd)) ;
if (c == '!') c = 'r' ;
putchar (c) ;

您可以用

替换整个代码
for(;;)
{
  char c = serialGetchar (fd);
  if(c == '!')
  {
    putchar('n');
  }
  else
  {
    putchar(c);
    fflush (stdout);
  }
}

在为其编写'n'之后,不必冲洗一下 - 这样做会自动触发冲洗。因此,作为次要优化,此代码在找到'!'时不会两次冲洗。

最新更新