-1

バイナリで記述されたいくつかの 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;
}
4

1 に答える 1