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) 的写法,但根据我的测试并没有效果,不推荐使用。
需要注意的是,一旦设置成了二进制模式,换行符的自动转换将不会被进行。
本文介绍如何在C/C++中将标准输入stdin设置为二进制模式,以便正确读取二进制数据。特别针对Windows平台下r模式与rb模式的区别,提供了一段示例代码实现stdin的二进制读取。
2643

被折叠的 条评论
为什么被折叠?



