3

c / c ++の単純なテキストファイルではないファイルのコンテンツを読み取るにはどうすればよいですか?たとえば、.jpg / .png / .bmpなどの画像ファイルを読み取り、特定のインデックスの値を確認して、色を確認したいのですが。または、.exe / .rar / .zipがあり、さまざまなインデックスに格納されている値を知りたい場合はどうすればよいですか?私はcスタイルの読み取りファイルを知っています。

FILE *fp;

fp = fopen("example.txt","r"); /* open for reading */

char c;

c = getc(fp) ;

「example.txt」を「image.png」などに置き換えてもいいのでしょうか?正しいデータを取得できますか?

4

3 に答える 3

9

非テキストファイルを開くときは、バイナリ(非翻訳)モードを指定する必要があります。

FILE *fp = fopen("example.png", "rb");

通常の場合、ファイル内の構造体をミラーリングする構造体を定義し、ファイルから構造体freadへの読み取りに使用することで、バイナリファイルからの読み取りのほとんどを実行します(ただし、これは慎重に行う必要があります。構造体のパディングは、メモリ内の表現とディスク上の表現で違いはありません)。

于 2012-04-19T06:03:07.043 に答える
2

ファイルをバイナリモードで開く必要があります。これにより、ファイルにあったものから変更されていない「raw」モードでバイトを読み取ることができます。

ただし、特定のピクセルの色などを決定するには、ファイル内のバイトの意味と、読み取られるファイルに対してそれらがどのように配置されているかを完全に理解する必要があります。この2番目の要件ははるかに困難です。そのためには、そのファイルタイプの形式について調査する必要があります。

于 2012-04-19T06:01:14.470 に答える
1

ええ、あなたはbinary modecでどんなファイルでも開くことができます。興味がある場合は、そのような非テキストファイルの最初のバイトを読み取ることもできます。

ほとんどの場合、すべての異なるファイル形式にはいくつかの固定ヘッダーがあるため、それに基づいてそのファイルのタイプを識別できます。

matroska(.mkv)ファイルを開き、最初の4バイトを読み取ります。これは常にあります。

0x1A   0x45   0xDF   0xA3

hexdumpLinuxのバイナリ表現ユーティリティで任意のファイルを表示することもできます

==================== 編集:

such as .jpg/.png/.bmp and see the value at certain index,to 
check what colour it is?

ここでは、そのファイルの形式を理解する必要があり、それに基づいて、どの場所のデータでどの情報が示しているかを知ることができます。

于 2012-04-19T06:23:31.993 に答える