【发布时间】:2017-11-13 09:26:42
【问题描述】:
我在 C 上有一个串行应用程序,它接收数据并将其写入二进制文件。问题是所有数据都是相同的,但是当我在发送端有0A 时,我在接收端有0D。我已将串行端口设置为原始模式并使用wb 选项打开文件。任何线索如何避免这种情况?如果需要一些代码,我会发布它。
谢谢
编辑---------- 文件打开:
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);
---------修复----------
设置此选项可解决问题:
options.c_oflag &= ~OPOST;
【问题讨论】:
-
第一步:显示代码(minimal reproducible example的形式)
-
@FelixPalmen 完成
-
@Lomazo 不完整或可验证。请发布我们可以编译而无需自己填补空白的代码。
-
@Lomazo 您应该先阅读如何创建minimal reproducible example。这是一些工作要做,但这是在不让人们玩猜谜游戏的情况下获得答案的唯一方法。不要张贴代码墙,将问题简化为展示它的最小代码。
-
这看起来像一个 CrLf 问题 - 0xa 是行向下(换行)
\n字符。有一些系统,例如 windows,会自动为其添加回车符(Cr,\r),即 0xd