我在C上有一个串行应用程序,它接收数据并将其写入二进制文件。问题是所有数据都是相同的,但是当我在发送端有0A
时,我在接收端有0D
。我已将串行端口设置为原始模式,并使用wb
选项打开该文件。有任何线索如何避免这种情况?如果需要一些代码,我会发布它。
感谢
EDIT -------------------------- 文件打开:
FILE *fout;
fout = fopen(file,"wb");
串行选项:
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
/* To disable software flow control simply mask those bits: */
options.c_iflag &= ~(IXON | IXOFF | IXANY);
options.c_lflag &= ~(ICANON|ECHO|ECHOE|ISIG);
tcsetattr(fd, TCSANOW, &options);
success = 1;
return success;
写在文件上:
fwrite(buffer,1,n,fout);
---------- FIX ----------------------
设置此选项可解决问题:
options.c_oflag &= ~OPOST;
答案 0 :(得分:3)
您需要屏蔽ICRNL
模式,该模式将enter(回车)键转换为换行符字符。这是在接收端,而不是在您的程序中。还有一个相应的输出模式可能会在你的结尾设置,但不太可能。