簡體   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