首页 > 解决方案 > ifstream operator>> 和 get() 方法有什么区别?

问题描述

最近,我>>在读取二进制文件时使用了运算符,但在某些情况下它会跳过一个字节。在我的代码中找到错误的位置给我带来了很多问题,但最后我设法用该get()方法解决了这个问题,但我仍然不知道为什么>>不时跳过字节。

m_Value目标是将文件中的第一个字节加载到uint8_t.

代码>>

bool CByte :: load ( ifstream & fin)
{
    if(! ( fin >> m_Value ) ) return false;
    return true;
} 

代码get()

bool CByte :: load ( ifstream & fin)
{
    char c = 0;
    if(! ( fin . get ( c ) ) ) return false;
    m_Value = static_cast <uint8_t> (c);
    return true;
}

标签: c++fstreambinaryfilesifstream

解决方案


operator>>格式化的输入函数get()未格式化的输入函数

重要的区别是,格式化输入在提取之前会跳过空格1,它会解析数据。它旨在从流中提取文本或数字,而不是读取二进制数据。


1除非另有明确配置,否则std::noskipws


推荐阅读