【发布时间】:2020-08-26 01:44:07
【问题描述】:
我有两个通过 iostream 进行通信的 c++ exe。第一个 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,1,2,3,4,5,6,7,8,9,13,10,11,12,13...
在 10 处有问题,您可以在它之前看到额外的 13。可能 cout 希望通过在 \n 字符之前添加额外的回车来提供帮助。但是当一个人想要在两个进程之间传输纯字节时,这很烦人。是的,cout 是为了人类可读性,但是有没有办法告诉 cout 或 printf 不要这样做?还是使用另一个不适合人类阅读的流?
【问题讨论】:
-
某事正在为您的输出添加 DOS 行结尾。
10,例如'\n'被翻译成"\r\n",这是 DOS CRLF 行的结尾。您打开"exe1.exe"的事实表明您在 Windows 上。 -
cout处于文本模式。改为二进制。 -
@chux 哦,很好。就偷偷溜过去了。
标签: c++ printf ipc cout bytestream