C/C++提供的标准输入stdin默认是以"r"模式打开的,在Linux下由于"r"和"rb"效果相同,因此不会受到影响。在Windows下,"r"意味着文本模式,\r\n会被转换成\n,而且遇到EOF就会停止。
因此为了从标准输入读取二进制数据,需要向程序中添加以下代码:
#include <io.h>
#include <fcntl.h>
int main()
{
_setmode(_fileno(stdin), _O_BINARY);
这段代码使用了fcntl.h中的_setmode函数将stdin模式设置为二进制模式。
另外据说还有一种 freopen(NULL,"rb",stdin) 的写法,但根据我的测试并没有效果,不推荐使用。
需要注意的是,一旦设置成了二进制模式,换行符的自动转换将不会被进行。