私はmpz_classを使用しています(Visual Studio C ++2010でMPIR2.5.1を使用し、MPIRのC ++バージョンを使用しています)。私にとっては、メモリに膨大な数を格納することはできないため、バイナリファイルで実行したいと思います。
私はすでにこれをテキストファイルで終了しましたが、100,000以上のビット数を使用すると、バイナリファイルは(うまくいけば)多くのスペースを節約するはずです。
私がやろうとしていることを理解するのに役立つ短い例を書きました。
ofstream binFile;
binFile.open ("binary.bin", ios::out | ios::binary);
mpz_class test;
test.set_str("999999999999999",10);
binFile.write((char *)(&test), sizeof(test));
cout << "NUMBER: " << test << "\tSIZE: " << sizeof(test) << endl;
binFile.close();
mpz_classインスタンスを表す文字データを書き込もうとしています。次に、それをテストするために、ファイルを読み取ろうとしました。
ifstream binFile2;
binFile2.open("binary.bin", ios::in | ios::binary);
mpz_class num1 = 0;
binFile2.read ((char *)(&num1), sizeof(num1));
cout << "NUMBER: " << num1 << "\tSIZE: " << sizeof(num1) << endl;
binFile2.close();
オンラインで見た多くの例では、クラスデータをバイナリファイルに保存するためにこのメソッドを使用していますが、私の出力は次のとおりです。
NUMBER: 999999999999999 SIZE: 12
NUMBER: 8589934595 SIZE: 12
クラスデータを直接保存してから再度読み取ることができないのはなぜですか?mpz_classのインスタンスのサイズを12にする方法はありません。これは、ポインターのサイズですか?
私もこれを試しましたが、基本的に同じことだと思います。
char* membuffer = new char[12]; //sizeof(test) returned 12
binFile2.read (membuffer , sizeof(test));
memcpy(&test, &membuffer, sizeof(test))
これを修正する方法についてのアドバイスをいただければ幸いです。ありがとう。