下面的代码一次处理输入的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) ;
}
}
答案 0 :(得分: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) ;
}
}
答案 1 :(得分:1)
char c = serialGetchar (fd)) ;
c = (c == '!') ? '\r' : c ;
putchar (c) ;
或者换句话说,
char c = serialGetchar (fd)) ;
if (c == '!') c = '\r' ;
putchar (c) ;
答案 2 :(得分:1)
您可以用
替换整个代码for(;;)
{
char c = serialGetchar (fd);
if(c == '!')
{
putchar('\n');
}
else
{
putchar(c);
fflush (stdout);
}
}
在向'\n'
写入之后清除标准输出是没有必要的 - 这样做会自动触发冲洗。因此,作为次要优化,此代码在找到'!'
后不会刷新stdout两次。