c++ - c++ 从 istream 读取二进制数据
问题描述
我有一个 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);
}
解决方案
您可以检查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()
- 但请注意:“此函数的行为是高度特定于实现的。 ”这可能是也可能不是问题。
推荐阅读
- java - 查找实现泛型接口的类的类型
- excel - 将文本文件转换为 excel 文件
- rust - Rust 引用 Vec 的当前函数错误所拥有的数据
- javascript - TypeError:null 不是对象(评估'b.body') - Highcharts/wkhtmltopdf
- ubuntu - 开始机器恢复之旅时出现 ubuntu 错误
- aframe - A-Frame:如果没有与孩子相交,则触发父母的 raycaster-intersected-cleared
- javascript - 从失败的承诺中“恢复”的正确方法?
- autodesk-forge - DWF 彩色但 SVF 黑色
- r - 在 r 中使用一组公式创建附加列
- r - 如何在 R 中使用 ggplot 增加 x 轴分辨率(从每年到每月)