C++ 如何从stdin打印出前4个字节

C++ 如何从stdin打印出前4个字节,c++,io,binary,dataformat,C++,Io,Binary,Dataformat,我有这个计划: #include <iostream> int main() { std::freopen(nullptr, "rb", stdin); char buf[4]; std::fread(buf, 1, 4, stdin); std::cout << buf << std::endl; } 我什么也得不到 但是如果我创建一个包含test123的文件test2。并且做: cat test2 |

我有这个计划:

#include <iostream>
int main() {
    std::freopen(nullptr, "rb", stdin);
    char buf[4];
    std::fread(buf, 1, 4, stdin);
    std::cout << buf << std::endl;
}
我什么也得不到

但是如果我创建一个包含
test123
的文件
test2
。并且做:

cat test2 | main
我得到:
test
与预期一致

所以这让我觉得我不知怎么的读不懂二进制输入


我的问题可能是什么?

您希望从二进制输入文件中读取的四字节值是什么?如果向它们初始化数组(跳过)文件读取,然后以相同的方式输出缓冲区,会发生什么?如果这样做有效的话,你就把问题缩小到了阅读上。如果失败,则是关于输出。如果将四个(大概)不可打印的ascii值作为四个
char
s输出,您希望得到什么exactlx?对于您的问题,为什么不直接从
std::cin
输出四个字节,使用
将任何
char
类型写入
std::cout
,您希望从二进制输入文件中读取的四字节值是什么?如果向它们初始化数组(跳过)文件读取,然后以相同的方式输出缓冲区,会发生什么?如果这样做有效的话,你就把问题缩小到了阅读上。如果失败,则是关于输出。如果您将四个(大概)不可打印的ascii值作为四个
char
s输出,那么您希望输出的精确值是多少?
std::cout为什么不直接从
std::cin
输出四个字节呢?至于您的问题,请使用

cat test2 | main