4

こんにちは、RAWファイル内でjpegを見つけようとしています

各 jpeg の先頭は次のいずれかで始まると言われました
- 0xff 0xd8 0xff 0xe0
- 0xff 0xd8 0xff 0xe1

だから私はこれをやっています:

// open input file 
FILE* inptr = fopen("card.raw", "r");

// create an array to hold info read from the memory card
char buffer[512];


int counter=0;
int counter2=0;


while ((fread(buffer, sizeof(char), 512, inptr)!=0))
{

    if(buffer[0]==0xff)
    {
        counter++;
        printf("%2d - Found a jpeg!\n", counter);

    }

    else 
    {   
        //Just to test
        counter2++;
        printf("%2d - Nothing Found!\n", counter2);
    }
}

しかし、そこにいくつかの画像があることは確かですが、プログラムは何も見つけていません。ご提案いただきありがとうございます。

4

2 に答える 2

3

答えが見つかりました!!、次のように buffer を unsigned char として宣言する必要がありました。

unsigned char buffer[512];
于 2012-10-18T20:40:05.647 に答える
0

はい、この場合は unsigned char の方が自然ですが、signed char を使用し続けたい場合 (単純な「char」は環境によって署名される場合とされない場合があります。明示的に指定することをお勧めします)、0xff を使用する代わりに、 -1 と比較できます:

if(buffer[0]==-1)

そうは言っても、おそらく、ファイル全体を一度mmapしてから、割り当てられたメモリをループ処理したでしょう。

最後に、0xff だけでなく、JPEG の開始を示すシーケンス全体を探しているので、 memmem()を使用して、mmap 領域内のシーケンス全体を検索します。そうすることで、JPG ファイルが 512 ブロックの先頭ではない可能性にも対処できます。

于 2012-10-18T21:04:01.460 に答える