我目前仍然无法准备好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;
}
现在,我目前只是完成这项任务的一部分。
答案 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
表达式永远不会为真。