在c中读取jpeg文件时遇到问题

时间:2013-02-09 05:47:57

标签: c

我目前仍然无法准备好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;
    }

现在,我目前只是完成这项任务的一部分。

2 个答案:

答案 0 :(得分:2)

if(buffer[0]==255 && buffer[1]== && ||的语法不正确。

buffer[1]==代替&&之后应该有一些价值。

这是错误的帖子吗?

答案 1 :(得分: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表达式永远不会为真。