と
long int *x=new long int[1424];
1424の配列を指すポインタを宣言しますlong int
。しかし、読書で
in.read((char*)x,1424);
あなたは1424バイトを読んでいます。
ループでは、配列をループしますが、インデックスに4を追加するため、の4つの要素ごとにのみx
プッシュバックされます。
最初に、64ビットマシンでlong
は8バイトになる可能性があることを考える必要があります。また、配列を動的に割り当てる必要もありません。また、ファイルに書き込んだときと同じように、配列には356個のエントリが含まれている必要があります。sizeof(x)
その後、readの呼び出しでバイトを読み取ることができます。そして最後にループで、0からsizeof(x) / sizeof(x[0])
:にループします。
long int x[356];
ifstream in("h.h",ios::binary|ios::in);
in.read((char*) x, sizeof(x));
for(int y = 0; y < (sizeof(x) / sizeof(x[0])); y++)
{
}
内容をとして読みたい場合は、イテレータと標準のC ++アルゴリズムを使用しlong int
てstd::vector
、実際には「より簡単な」方法があります。
std::vector<long int> e1;
std::ifstream in("h.h", std::ios::binary | std::ios::in);
std::copy_n(std::istream_iterator<long int>(in),
356,
std::back_inserter(e1));
上記のステートメントは、ベクターを宣言し、ファイルを開き、356long int
エントリをファイルからベクターにコピーしますe1
。
参考のために、、、そしてもちろんを参照しstd::istream_iterator
てstd::back_inserter
くださいstd::copy_n
。
上記のC++ソリューションは機能していなかったので、別のソリューションを試してみました。
std::vector<long> v(356);
std::ifstream in("h.h", std::ios::binary);
std::for_each(std::begin(v), std::end(v), [&in](long& v) {
in.read(reinterpret_cast<char*>(&v), sizeof(v));
});
上記の解決策はこのプログラムでテストされており、私にとってはうまくいきます。
上記のステートメントは、356エントリを含むベクターを作成しlong
、ファイルを開き、一度に1つのエントリーをベクターに読み込みます。