有没有办法将stdout设置为二进制模式?在哪种模式下stdout没有任何操作,从我的调试问题,我认为它是文本模式,这是真的吗?有没有办法将stdout设置为二进制模式?
我试图函数:
freopen(NULL,"wb",stdout)
,但我的计划是崩溃,当我这样做。
有没有办法将stdout设置为二进制模式?在哪种模式下stdout没有任何操作,从我的调试问题,我认为它是文本模式,这是真的吗?有没有办法将stdout设置为二进制模式?
我试图函数:
freopen(NULL,"wb",stdout)
,但我的计划是崩溃,当我这样做。
我尝试下面的代码提交给设置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下你不能这样做,因为在这个平台上的二进制和文本模式是一样的东西。
这可以工作。你可以通过做 fwrite(“a \ nb”,1,3,stdout)来测试它。 如果生成的文件是3个字节,则stdout是二进制的。如果没有上面的setmode()调用,你最终会得到一个4字节的文件。 –
简单的答案是否定的。该模式在iostream对象被构建时确定,并且以后不能更改。有些实现可能会提供稍后执行的手段,但这不是标准化的。在一些实现中,在stdout
上执行freopen
可能会改变模式,尽管我认为这是正式的,但这在C++中是被禁止的。 (它是在C中定义的实现)显然,它不适用于你的实现。
你最好打赌是找出你的系统如何命名控制台设备(Unix下的"/dev/tty"
;我认为在Windows下),打开它以所需的模式输出。
只需'CON'而不是'CONS',但这不可能有所帮助 - 在需要二进制输出的情况下,所述输出不太可能会转到控制台。你可能甚至不会拥有一个控制台。 (最典型的场景是一个CGI脚本,例如,为Web服务器动态生成JPEG。) –
为什么? 'stdout'应该与文本终端兼容。根据当前语言环境获取文本语义。 (请注意,C和C++有不同的语言环境系统,并且您需要采取积极措施使库语言环境与操作系统语言环境匹配。) – Potatoswatter
如果您需要'二进制模式'省略格式化输出 - 坚持未格式化输出 –
出于何种目的?听起来像个坏主意...... – tenfour