1

私は現在、jpegファイルを準備できることに固執しています。私は近づいているように見えますが、何らかの理由で、ファイルは jpeg ファイルの個別の署名を読み取っていません。もちろん、何か間違っているのか、不器用なのか、それとも何をしているのかはわかりません。ここに私が現在持っているコードがあります:

int main (void)
{
    typedef unsigned char BYTE ;
    char image_name[8]; 
    int counter=1;
    FILE* fp = fopen("card.raw", "r");
    FILE *outfile=NULL;
    int size=512;
    BYTE buffer[size];
    while (feof(fp) == false) 
    {
        fread(buffer,size,sizeof(unsigned char),fp);
        if (fp== NULL)
        {
            printf("Could not open file \n");
            return 1;
        }
        if(buffer[0]==255 && buffer[1]== && || buffer[2]==255 && (buffer [3]==224 && buffer[3]==225))
        {  
            for(int i=0; i<51; ++i){        
                sprintf(image_name, "%.3d.jpg", counter);        
                outfile= fopen(image_name, "w");
                fwrite(buffer,sizeof(buffer),1,outfile); 
                counter=counter+1;
                if (outfile == NULL)              
                {                   
                    printf("could not create jpeg file\n");                   
                    return 2;              
                }      
            } 
        }
        fclose(fp);
        fclose(&outfile);
        return 0;
    }

現在、私はこの任務の途中に過ぎません。

4

2 に答える 2

2

の構文がif(buffer[0]==255 && buffer[1]== && ||正しくありません。

buffer[1]==の代わりに後に何らかの値があるはずです&&

投稿のタイプミスですか?

于 2013-02-09T05:53:50.867 に答える
1

ファイルはテキスト モードで開きますが、バイナリ モードで開く必要があります。

fopen("card.raw", "rb");  /* Notice the `b` for binary mode */

書き込み用に開く場合も同様です。


また、単一の文字のみを読み取りますが、複数をチェックします。

/* This reads a single byte (`sizeof(unsigned char)` == 1) */
fread(buffer,size,sizeof(unsigned char),fp);

/* Here you check multiple bytes in the buffer,
 * even though you only have read a single byte
 */
if(buffer[0]==255 && buffer[1]== && || buffer[2]==255 && (buffer [3]==224 && buffer[3]==225))

また、式が真になるbuffer [3]==224 && buffer[3]==225ことは決してないことに注意してください。

于 2013-02-09T05:53:14.083 に答える