繁体   English   中英

如何使用ifstream和istreambuf_iterator将二进制文件读取为float?

[英]How to read binary file as float with ifstream and istreambuf_iterator?

我将一个二进制文件读取到uchar向量中,如下所示:

std::ifstream is("path", std::ios::in | std::ios::binary);
std::vector<unsigned char> fileVector((std::istreambuf_iterator<char>(is)),
                                       std::istreambuf_iterator<char>());

但是现在我想将字节(4个相邻字节)读入float并创建一个float的向量。 没有std::istreambuf_iterator<float> 我怎么做?

void read_feature(std::ifstream& feature_file,float* features) {
  feature_file.seekg(5*sizeof(int));
  feature_file.read((char*)features, 4096*sizeof(float));
}

使用此代码,您可以从不包括前5个整数的数据开始读取4096个元素的浮点数组。

您必须重新解释强制转换char *float *和取消引用。 这不是一项常见的任务,因此您似乎应该使用这种技巧

for(int i=0;i<fileVector.size();i+=sizeof(float))
{
    float f=*((float*)&fileVector[i]);
    out.push_back(f);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM