2

次のバイナリ構成でバイナリファイルを読み込もうとしています

00 00 00 1A 79 20 83 DB 44 ...

次の機能を使用する

static BitArray getBitArray(string filename)
{
    FILE *fs = fopen(filename.data(),"r");
    fseek (fs , 0 , SEEK_END);
    unsigned long s = ftell (fs);
    rewind (fs);

    unsigned char *buffer = new unsigned char[s+1];

    fread(buffer,1,s,fs);

    BitArray bArray;
    for(int i=0; i<s; i++)
        bArray.add(buffer[i]);

    delete[] buffer;
    fclose(fs);
    return bArray;
}

BitArray私自身のビット操作クラスはどこにありますか。問題は、前述のbinファイルの場合、次のように最初の3つの0のみを読み取ることです。

00 00 00

fseek正しいファイルサイズが見つかりましたが。

その文字列0が必要な理由00 00 00 1Aは、32ビット整数を形成するためです。これはたまたま3を残すのに十分小さいため0x00です。

ファイルの先頭にあるsの文字列が0x00として認識されるEOFのではないかと思ったので、ファイルの前に文字を埋めてみましたが、うまくいきませんでした。

これを引き起こしている可能性がありますか?

4

1 に答える 1

9

Windowsでは、0x1A別名^Zはファイルの終わり文字です。バイナリモードではなくテキストモードでファイルを開きました。^ZWindowsでテキストモードでファイルを開くと、ファイルの終わりまたは最初の文字まで読み取られます。

バイナリモードでファイルを開く"rb"代わりfopenにに渡します。"r"

于 2012-05-17T08:20:05.263 に答える