C/C++:是否可以通过控制台传递二进制数据?

P5m*_*sic 5 c c++ console console-application binary-data

我想知道是否有可能一个实用程序生成二进制数据(即图形图像)并通过 IO 控制台输出它们,而另一个应用程序在了解这些数据的性质并获悉传入字节数的情况下能够从 IO 控制台读取它。

650*_*502 3

对的,这是可能的。虽然stdin/stdout通常是文本,但有许多程序被设计为从标准 I/O 通道获取二进制输入或写入二进制输出。

唯一需要注意的是,通常stdout/stdin在 Windows 下是以文本模式打开的,因此您应该将它们切换为二进制模式以避免字符翻译。

要在 Windows 上设置二进制模式,stdinstdout需要使用_setmode调用:

#include <stdio.h>
#include <fcntl.h>
#include <io.h>

int main( void )
{
   int result;

   // Set "stdin" to have binary mode:
   result = _setmode( _fileno( stdin ), _O_BINARY );
   if( result == -1 )
      perror( "Cannot set mode" );
   else
      printf( "'stdin' successfully changed to binary mode\n" );
}
Run Code Online (Sandbox Code Playgroud)

还要注意文件缓冲。通常,只有当输出到交互式控制台时,程序才会在换行符上刷新缓冲区,而不是在输出到另一个进程时。因此,如果您需要同步,请记住在写入消息后调用fflush,否则其他进程将无法获取数据。