質問

だから私はファイルの3つの最初のバイトを読み取る非常に単純なプログラムを持っています:

int main(void)

{

    FILE *fd = NULL;
    int i;
    unsigned char test = 0;
    fd = fopen("test.bmp", "r");

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

    for (i=0; i<3; i++) {
        fread(&test, sizeof (unsigned char), 1, fd);
        printf("position: %ld char:%X\n", ftell(fd), test);
    }

    return (0);
}
.

テキストファイルで試してみるとうまく機能します。

position: 0
position: 1 char: 61
position: 2 char: 62
position: 3 char: 63
.

しかし、私がPNGでそれを実行するときは、次のようになります:

position: 0
position: 147 char:89
position: 148 char:50
position: 149 char:4E
.

ファイルの3つの最初のバイトは確かに89 50 4eであることに注意してくださいが、147がどこから来たのかわかりません。 BMPファイルを使えば:

position: 0
position: -1 char:42
position: 0 char:4D
position: 1 char:76
.

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

役に立ちましたか?

解決

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

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

テキストモードでビットマップのようなバイナリファイルを読み込もうとすると、キャリッジリターンに対応するバイトとLINEFEEDSが物事を混同しています。

他のヒント

この質問を見てください BMPファイル

は問題が開くモードにあるように見えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top