バイナリで記述されたいくつかの double (3x3 行列の場合、正確には 9) を含むファイルがあります。私は、それらが表す実際の double 値としてそれらを利用しようとしています (数値 ej: 5.66 / -1.882 / など..)。
それらは、スペースなしで次々とファイルに配置されます: 3.245-2.453.253...... そして、それらは正確に 9 つの数字です。
次に、9 スロット (0-8) のベクトルを指すポインターを持つ構造体を持っています。これに double の値を入力したいので、これまでに試したことは次のとおりです。
struct input{
double data*;
double myvector[9];
};
その後
input test;
test.data = test.myvector;
ifstream f(file,ios::binary);
f.read(reinterpret_cast<char *>(test.data),sizeof(double)*3*3);
次に、単純な std::cout で値を確認しようとすると、奇妙な数字がコンソールに出力されました。
-0.1667 は次のように出力されました: -1,57218e+26
これは起こるはずですか?そうでない場合、何が間違っていますか?正しく実行している場合、「-0.1667」を取得するには、この値をどうする必要がありますか?
ありがとうございました。
編集:彼らがファイルを作成するまでに、彼らはポインタ(私の例のように倍精度のベクトルを指している)を持っていて、f.write(あなたがここに置いたものは何でも)を作っただけです。数字が次々とあると言ったのは、それが意味することです。倍数の間に黒い文字はありません。
編集 2: 完全なコード:
#include <iostream>
#include <fstream>
using namespace std;
struct input{
double data*;
double myvector[9];
};
int main(int argc, char * argv[]){
input test;
test.data=test.myvector;
ifstream f(argv[1], ios::binay); // argv[1] is the file EJ: ./program myfile
f.read(reinterpret_cast <char *> (test.data), sizeof(double)*9); // being 9 values.
for(int i=0;i<9;i++){
cout << test.data[i] << endl;
}
return 0;
}