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 回答