C “串行应用程序写入”;0D";作为「;0A";

C “串行应用程序写入”;0D";作为「;0A";,c,hexdump,C,Hexdump,我在C上有一个串行应用程序,它接收数据并将其写入二进制文件。问题是所有数据都是相同的,但当发送端有0A时,接收端有0D。我已将串行端口设置为原始模式,并使用wb选项打开文件。有什么线索可以避免这种情况吗?如果需要一些代码,我会发布它 谢谢 编辑-------------------------- 文件打开: FILE *fout; fout = fopen(file,"wb"); 序列选项: options.c_cflag |= (CLOCAL | CREAD);

我在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_of lag&=~OPOST

您需要屏蔽将回车键转换为换行符的ICRNL模式。这是在接收端,而不是在您的程序中。还有一种相应的输出模式可以在您的终端上设置,但可能性较小。

第一步:显示代码(以a的形式)@FelixPalmendone@Lomazo这是不完整的或不可验证的。请发布我们可以编译的代码,而无需填补自己的空白。@Lomazo您应该阅读如何创建第一个。这是一项需要做的工作,但这是在没有人玩猜谜游戏的情况下获得答案的唯一方法。不要张贴代码墙,将问题减少到显示它的最小代码。这看起来像是CrLf问题-0xa是下线(换行)
\n
字符。有些系统,如windows,会自动在回车(Cr,
\r
)字符前加上前缀,即0xd“还有相应的输出模式”<代码>OCRNL显然。谢谢你的回答。因此,如果我在我的应用程序
options.c\u cflag&=~OCRNL,应该没问题吧?