从标准输入stdin读取二进制数据

C/C++提供的标准输入stdin默认是以”r”模式打开的,在Linux下由于”r”和”rb”效果相同,因此不会受到影响。在Windows下,”r”意味着文本模式,\r\n会被转换成\n,而且遇到EOF就会停止。

因此为了从标准输入读取二进制数据,需要向程序中添加以下代码:

1
2
3
4
5
6
#include <io.h>
#include <fcntl.h>

int main()
{
_setmode(_fileno(stdin), _O_BINARY);

这段代码使用了fcntl.h中的_setmode函数将stdin模式设置为二进制模式。

另外据说还有一种 freopen(NULL,”rb”,stdin) 的写法,但根据我的测试并没有效果,不推荐使用。

需要注意的是,一旦设置成了二进制模式,换行符的自动转换将不会被进行。

文章转自: https://blog.csdn.net/Kiritow/article/details/81697542

文章作者: QUST-Coder
文章链接: http://qustkx.com/2019/08/17/blog3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 青岛科技大学信息学院科技创新协会