0

下面的代码一次处理传入的 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) ;
  }
}
4

3 回答 3

2

您可以在与以下相同的单个字符基础上执行此操作:

#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) ;
  }
}
于 2017-09-26T14:29:26.307 回答
1

您可以将整个代码替换为

for(;;)
{
  char c = serialGetchar (fd);
  if(c == '!')
  {
    putchar('\n');
  }
  else
  {
    putchar(c);
    fflush (stdout);
  }
}

没有必要在写入后刷新标准输出'\n'- 这样做会自动触发刷新。所以作为一个小的优化,这个代码在找到一个'!'.

于 2017-09-26T14:46:10.230 回答
1
char c = serialGetchar (fd)) ;
c = (c == '!') ? '\r' : c ;
putchar (c) ;

或者,换一种说法,

char c = serialGetchar (fd)) ;
if (c == '!') c = '\r' ;
putchar (c) ;
于 2017-09-26T14:22:05.193 回答