【问题标题】:c++ read binary data from istreamc++ 从 istream 读取二进制数据
【发布时间】:2021-12-24 02:03:16
【问题描述】:

我有一个 istream,我必须将它读入缓冲区。遇到 eof 后,我找不到找出 read_len 的方法吗?我无法使用 get,因为我的文件没有分隔符。

看来只能一个字一个字地读了,真的是唯一的选择吗?

char buffer[128];
while(is.good()) {
     is.read(buffer, sizeof(buffer));
     size_t read_len = sizeof(buffer);
     if (is.eof()) {
         read_len = xxxx;
     }
     process(buffer, read_len);
}

【问题讨论】:

标签: c++ binary-data istream


【解决方案1】:

您可以检查istream::gcount() 哪个“返回上次无格式输入操作提取的字符数”。

例子:

    while(is) {
         is.read(buffer, sizeof buffer);
         auto read_len = is.gcount();  // <- 
         if(read_len > 0)
             process(buffer, read_len);
         else
             break;
    }

您也可以使用istream::readsome() - 但请注意: “此函数的行为是高度特定于实现的。”这可能是也可能不是问题。

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2011-11-27
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多