2013-02-09 135 views
1

我目前被困在能夠準備jpeg文件。它看起來像我很接近,但無論出於何種原因,該文件不讀取jpeg文件的不同簽名。當然,我不確定我是否做錯了什麼,笨拙或什麼。這裏是我目前的代碼:在閱讀c文件中的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; 
    } 

現在,我目前只是完成這項任務的一部分。

+0

對不起,我不能有更多的幫助,但你提到它是一個「任務」。如果它是作業,我會添加「家庭作業」標籤,很多人會被彎曲成圍繞這些部分的'回合'。祝你好運! – Chris 2013-02-09 05:51:01

+3

@Chris:沒有。請閱讀作業標籤wiki。不要使用該標籤。 – Mat 2013-02-09 05:52:13

+0

我建議您不要共享一項作業的完整代碼,只是您懷疑的具體部分。 – InfZero 2014-12-17 03:46:44

回答

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可以從未是真實的。

+0

我不會認爲這是問題 - 任何符合POSIX的系統(包括Linux和OS X)都會將所有文件視爲二進制文件,並忽略「b」標誌。我相信這隻會在Windows上造成問題。 – 2013-02-09 06:08:04

+0

@MattPatenaude那麼,OP沒有指定平臺,但是這樣的錯誤通常是因爲在Windows上使用了錯誤的模式。 – 2013-02-09 06:09:39

+0

有效的點,添加它當然沒有任何傷害! – 2013-02-09 06:11:29

2

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

buffer[1]==而不是&&應該有一些值。

這是錯誤的後?

+0

這是一種類型。它被認爲是緩衝區[1] == 224我相信。 – user2014904 2013-02-09 06:51:00

+0

@您可能想用正確的代碼更新問題。 – Rohan 2013-02-09 06:55:13