串行应用程序将“0D”写为“0A”

时间:2017-11-13 09:26:43

标签: c hexdump

我在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;

1 个答案:

答案 0 :(得分:3)

您需要屏蔽ICRNL模式,该模式将enter(回车)转换为换行符字符。这是在接收端,而不是在您的程序中。还有一个相应的输出模式可能会在你的结尾设置,但不太可能。