如何使cout表现为二进制模式?

| 每次我执行'cout << endl \'甚至什至\'cout << \“ \\ n \” \',然后在Windows下启动我的程序以输出到文件(\“ a.exe result.out \“),我得到\” \\ r \\ n \“行结尾为\” result.out \“。 地球上是否有一种阻止它的方法,只是在每个\'cout << \\\\ n \“ \'上输出\” \\ n \“? 提前致谢。     
已邀请:
这可以在Visual Studio 2013中使用:
#include <io.h>
#include <fcntl.h>
#include <iostream>

int main( int argc, char * argv[] )
{
    _setmode( _fileno( stdout ),  _O_BINARY );
    std::cout << std::endl;
}
它将仅输出[0A],而不输出[0D] [0A]。     
我不相信您可以强迫ѭ1来输出二进制数据。通过C ++对用户可用的最低级别的接口是
streambuf
中的
streambuf
。您可以很好地假设object是
basic_filebuf
类型,并且C ++ 11标准的§27.9.1.4节要求
basic_filebuf
实现单独的文本和二进制模式。 检查特定于平台的扩展,以获取一种使用其文件描述符将另一个流打开到ѭ6的方法。然后,您可以在模式标志中指定“ 7”。 但是,通过第二个转换行尾的程序将输出传递给管道可能更容易。 编辑:现在,我看到您可能愿意进一步做些什么才能真正使程序直接输出您想要的内容。 只要C ++接口设置为非缓冲模式,就可以使用C接口输出换行符。 在程序的开始处,
cout
接收任何输出之前,请执行以下操作:
std::cout.rdbuf()->pubsetbuf( 0, 0 ); // go to unbuffered mode
当您要输出换行符时,请按照以下步骤操作:
_write( STDOUT_FILENO, 1, \"\\n\" ); // do not convert line ending
您可以将这个小块……金块……包装在自定义操纵器中:
#include <unistd.h>

std::ostream &endln( std::ostream &s ) {
    if ( s->rdbuf() == std::cout.rdbuf() ) { // this is cout or cerr into cout
        _write( STDOUT_FILENO, 1, \"\\n\" ); // do not convert line ending
        return s; // stream is unbuffered, no need to flush
    } else {
        return std::endl( s ); // other streams do convert to \\r\\n
    }
}
    

要回复问题请先登录注册