3

bin ファイルから浮動小数点数を読み取る (コンソールで表示する) ためのコードを Visual C++ で作成しています。バイナリ ファイルには、約 250 万の浮動小数点数が含まれています。

int main(){

   char* holder;

  ifstream fin;

  fin.open("male_16_down.bin",ios::binary|ios::in);

  if(!fin){

   cout<<" Error, Couldnt find the file"<<endl;

  }

  fin.seekg(0,ios::end);

  long int file_size_bin=fin.tellg();

  long int file_size=fin.tellg();

  fin.seekg(0,ios::beg);

  file_size=file_size/sizeof(float);

  holder=new char[file_size_bin];


  fin.read(holder,file_size*sizeof(float));

  float data=(float)atof(holder);

  cout<<data<<endl;



delete[] holder; 

float の場合は 4 バイト、char の場合は 1 バイトであることを知っています。このコードは 0 の数値を 1 つだけ出力します。atof()最初のバイトのみを数値に変換すると思いますが、数値全体を表示したいのですが、どうすればすべてを表示できますか?バイナリファイルの数字、どんな助けでも大歓迎です。

4

2 に答える 2

6
#include <fstream>
#include <iostream>

int main() {
    float f;
    std::ifstream fin("male_16_down.bin", std::ios::binary);
    while (fin.read(reinterpret_cast<char*>(&f), sizeof(float)))
        std::cout << f << '\n';
    return 0;
}
于 2013-10-27T14:43:03.747 に答える
3

うまくいけば、出力をファイルにリダイレクトすることを計画しているか、コンソールに 250 万行を出力するのに時間がかかりますが、これが目的の方法であることを無視してください。

#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>

int main()
{
    //Generate a file with some floats in it for testing
    std::ofstream fout("stuff.bin", std::ios::binary);
    float f;
    for(size_t i = 0; i < 100; ++i)
    {
        f = 3.14159f * i;
        fout.write(reinterpret_cast<const char*>(&f), sizeof(f));
    }
    fout.close();

    std::ifstream fin("stuff.bin", std::ios::binary);
    if(!fin)
    {
        std::cout << " Error, Couldn't find the file" << "\n";
        return 0;
    }

    fin.seekg(0, std::ios::end);
    const size_t num_elements = fin.tellg() / sizeof(float);
    fin.seekg(0, std::ios::beg);

    std::vector<float> data(num_elements);
    fin.read(reinterpret_cast<char*>(&data[0]), num_elements*sizeof(float));
    for(size_t i = 0; i < data.size(); ++i)
    {
        std::cout << std::fixed << std::setprecision(3) << data[i] << "\n";
    }
    return 0;
}
于 2013-10-27T05:20:46.137 に答える