1

したがって、ファイルの最初の 3 バイトを読み取る非常に単純なプログラムがあります。

int main(void)

{

    ファイル *fd = NULL;
    int i;
    符号なし文字テスト = 0;
    fd = fopen("test.bmp", "r");

    printf("位置: %ld\n", ftell(fd));

    for (i=0; i<3; i++) {
        fread(&test, sizeof (unsigned char), 1, fd);
        printf("位置: %ld 文字:%X\n", ftell(fd), テスト);
    }

    リターン (0);
}

テキストファイルで試してみると、うまくいきます:

位置: 0
位置: 1 文字: 61
位置: 2 文字: 62
位置: 3 文字: 63

しかし、たとえばPNGで実行すると、次のようになります。

位置: 0
位置: 147 文字:89
位置: 148 文字:50
位置: 149 文字:4E

ファイルの最初の 3 バイトは確かに 89 50 4E ですが、147 がどこから来たのかわかりません。bmp ファイルを使用すると、次のようになります。

位置: 0
位置: -1 文字:42
位置: 0 文字:4D
位置: 1 文字:76

これらの最初の位置がどこから来たか知っていますか? 助けてくれてどうもありがとう

4

3 に答える 3

4

ファイルをバイナリ モードで開く必要があります。

fd = fopen("test.bmp", "rb");

ビットマップのようなバイナリ ファイルをテキスト モードで読み込もうとすると、キャリッジ リターンと改行に対応するバイトが混乱を招きます。

于 2010-07-09T09:57:08.997 に答える
0

この質問を見てください。bmpファイルからバイトを読み取ります

問題はそれを開くモードにあるようです。

于 2010-07-09T10:00:56.910 に答える