1

C++ を使用してバイナリ ファイルを読み込むプログラムを作成しようとしています。助けを求めていた異常な出力に遭遇しました。

次の 4 バイトで始まるバイナリ ファイルがあります。

A1 B2 C3 D4 (を使用して検証hexdump -C)

そして、これらの4バイトを読み取るために使用しているコードは次のとおりです。

#include <iostream> // for reading and writing files
#include <fstream>

using namespace std;

char * buffer;
unsigned int LENGTH = 4;

int main(int argc, char ** argv)
{
    // open the binary file
    ifstream infile ("dump", ios::binary | ios::in);

    // create a buffer
    buffer = new char[LENGTH];

    // read LENGTH bytes from the file
    infile.read(buffer, LENGTH);

    // append the null byte to terminate the string
    buffer[LENGTH] = '\0';

    // loop over the 4 bytes read, and print
    for(int i = 0; i < LENGTH; i++)
    {
       printf("Buffer[%d] is %X\n", i, buffer[i]);
    }

    delete[] buffer;
    infile.close();


    return 0;
}

このプログラムは私にこれらの実際の結果を与えます:

Buffer[0] is FFFFFFA1
Buffer[1] is FFFFFFB2
Buffer[2] is FFFFFFC3
Buffer[3] is FFFFFFD4

しかし、私はこれらの結果を期待します:

Buffer[0] is A1
Buffer[1] is B2
Buffer[2] is C3
Buffer[3] is D4

3 0xFF バイトがどこから来ているのか誰か説明してもらえますか? ファイルの最初の 4 バイトにのみ影響しているように見えます。

4

2 に答える 2

8

char buffer[i]変数引数として渡されると、デフォルトで昇格されます。正しい値を取得するには、 と言いstatic_cast<unsigned char>(buffer[i])ます。

さらに、buffer[LENGTH]範囲外であるため、未定義の動作です。

于 2012-09-03T14:44:30.463 に答える