2

みなさんこんにちは!ファイルの最初の 4 バイトを読み取り、整数変数に格納しようとしています。ここに私がやっていることがあります:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>

using namespace std;

int main(){
    ifstream is;
    is.open ("binary_file.dat", ios::binary );
    char file_version[4];
    is.read(file_version, 4);
    int fv_int;
    memcpy(&fv_int, file_version, sizeof(fv_int));
    cout << fv_int;
}

しかし、結果は私が意図したものではありません。プログラムはファイルの最初のバイトを正しい位置にコピーしますが、残りのバイトは 0 と見なします。例:

ファイルの最初の 4 バイト:

10101010 00101100 00101100 00101100

プログラム実行後の fv_int の内容は次のとおりです。

10101010 00000000 00000000 00000000

整数の特定のバイトにアクセスする方法はありますか? それとも、ファイルからバイトを読み取るより良い方法でしょうか?

4

2 に答える 2

2

istream::read は正確に 4 バイトを読み取るのではなく、読み取ったバイト数を返します。戻り値を確認してください。ファイルが短すぎる可能性があります

追加のヒント:is.read(reinterpret_cast<char*>(&fv_int), size_of(fv_int));コードの量を減らし、冗長性を追加するために行うことができます

于 2012-12-24T20:03:49.823 に答える
1

最初の4バイトのファイルをプログラムにフィードすると、それらを完全に読み取って表示します。さらに診断するには、最後のcoutを次のように変更します。cout <<sizeof(int)<<" "<<hex<<fv_int<<endl;

于 2012-12-24T20:12:09.693 に答える