有没有办法将标准输出设置为二进制模式?

时间:2014-04-16 11:05:01

标签: c++

有没有办法将stdout设置为二进制模式?在没有任何操作的stdout模式中,从我的调试问题开始,我认为它处于文本模式,是真的吗?

我试过功能:

freopen(NULL,"wb",stdout)

但是当我这样做时,我的程序崩溃了。

2 个答案:

答案 0 :(得分:10)

我尝试使用下面的代码将stdin和stdout设置为二进制模式(在Windows上):

#ifdef _WIN32
  #include <io.h>
  #include <fcntl.h>
#endif
...
#ifdef _WIN32
  setmode(fileno(stdout),O_BINARY);
  setmode(fileno(stdin),O_BINARY);
#endif

在Linux下你不能这样做,因为在这个平台上二进制和文本模式是一回事。

答案 1 :(得分:0)

简单的答案是否定的。该模式是在构造iostream对象时确定的,以后不能更改。一些实现可以提供稍后执行它的手段,但是这不是标准化的。在某些实现中,在freopen上执行stdout可能会改变模式,虽然我认为正式地说,这在C ++中是被禁止的。 (它是在C中定义的实现。)显然,它不适用于您的实现。

最好的办法是找出你的系统如何命名控制台设备(Unix下为"/dev/tty";我认为是"CONS",在Windows下),以所需模式打开它,然后输出它。