C “串行应用程序写入”;0D";作为「;0A";
我在C上有一个串行应用程序,它接收数据并将其写入二进制文件。问题是所有数据都是相同的,但当发送端有C “串行应用程序写入”;0D";作为「;0A";,c,hexdump,C,Hexdump,我在C上有一个串行应用程序,它接收数据并将其写入二进制文件。问题是所有数据都是相同的,但当发送端有0A时,接收端有0D。我已将串行端口设置为原始模式,并使用wb选项打开文件。有什么线索可以避免这种情况吗?如果需要一些代码,我会发布它 谢谢 编辑-------------------------- 文件打开: FILE *fout; fout = fopen(file,"wb"); 序列选项: options.c_cflag |= (CLOCAL | CREAD);
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_of lag&=~OPOST
您需要屏蔽将回车键转换为换行符的ICRNL模式。这是在接收端,而不是在您的程序中。还有一种相应的输出模式可以在您的终端上设置,但可能性较小。第一步:显示代码(以a的形式)@FelixPalmendone@Lomazo这是不完整的或不可验证的。请发布我们可以编译的代码,而无需填补自己的空白。@Lomazo您应该阅读如何创建第一个。这是一项需要做的工作,但这是在没有人玩猜谜游戏的情况下获得答案的唯一方法。不要张贴代码墙,将问题减少到显示它的最小代码。这看起来像是CrLf问题-0xa是下线(换行)\n
字符。有些系统,如windows,会自动在回车(Cr,\r
)字符前加上前缀,即0xd“还有相应的输出模式”<代码>OCRNL显然。谢谢你的回答。因此,如果我在我的应用程序options.c\u cflag&=~OCRNL代码>,应该没问题吧?