cout chr10在其前面添加了多余的chr13

问题描述

我有两个通过iostream通信的c ++ exe。第一个exe发送一个char(或字节)流,第二个exe截取并解码它们。

exe1.exe发出字符:

void main()
{
    for (int i = 0; i < 256; ++i)
    cout << static_cast<char>(i);
}

exe2.exe将它们带入:

void main()
{
    FILE* pipe = _popen("exe1.exe","rb");
    while (!feof(pipe))
        cout << static_cast<int>(fgetc(pipe)) << endl;
    _pclose(pipe);
}

一个人期望按顺序接收256个值,如下所示: 0,1,2,3,4,5,6,7,8,9,10,11,12,13 ...

但是有人得到 0,9, 13 ,10,13 ...

10处有问题,在此之前您可以看到另外13处。 cout可能希望通过在\ n字符之前添加额外的回车符来提供帮助。但是当人们想要在两个进程之间传输纯字节时,这很烦人。是的,cout是为了人类可读性,但是有没有办法告诉cout或printf不这样做呢?还是使用另一种不适合人类阅读的信息流?

解决方法

字符10是ASCII LF,在大多数平台上被视为换行符。特别是在Windows上,标准换行符是13 10CRLF)序列。 C ++流实现足够聪明,足以知道这一点,并且在文本模式下运行时,会在输出时将字符10转换为13 10。如果您不希望发生这种情况,则必须将输出流置于二进制模式。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...