在c语言中读取jpeg文件时遇到问题
我目前正忙于准备一个jpeg文件。看起来我很接近了,但不管出于什么原因,该文件没有读取jpeg文件的不同签名。当然,我不确定我是否做了错事或笨拙的事情。以下是我目前拥有的代码:在c语言中读取jpeg文件时遇到问题,c,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 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;
}
int main(无效)
{
typedef无符号字符字节;
字符图像_名称[8];
int计数器=1;
FILE*fp=fopen(“card.raw”,“r”);
FILE*outfile=NULL;
int size=512;
字节缓冲区[大小];
while(feof(fp)=false)
{
fread(缓冲区,大小,sizeof(无符号字符),fp);
如果(fp==NULL)
{
printf(“无法打开文件\n”);
返回1;
}
如果(缓冲区[0]==255&&buffer[1]=&&&&&&| |缓冲区[2]==255&&buffer[3]==224&&buffer[3]==225))
{
对于(int i=0;i您可以在文本模式下打开文件,但应在二进制模式下打开:
打开进行写作时也是如此
您还可以只读取单个字符,然后选中多个:
/* 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
永远不可能为真。if(buffer[0]==255&&buffer[1]=&&&&&&124;
的语法不正确
在缓冲区[1]==
之后应该有一些值,而不是&
这是帖子中的打字错误吗?对不起,我帮不了你什么忙,但你提到这是一项“作业”。如果是作业,我会加上“作业”tag,很多人在这些部分周围都会变形。祝你好运!@Chris:不。请阅读家庭作业标记wiki。不要使用该标记。我建议你不要共享一项作业的全部代码,只共享你怀疑的特定部分。我不会打赌这是问题所在-任何符合POSIX的系统,包括Linux和OS十、 将所有文件视为二进制文件,并忽略“b”flag。我相信这只会在Windows上引起问题。@Mattpanteaude好吧,OP没有指定平台,但像这样的错误通常是因为在Windows上使用了错误的模式。我这样做了,但仍然没有。似乎问题不在于我的代码,而在于文件?我被告知文件没有损坏,是合法的。@user2014904您只读取了一个字节,但检查了多个。请查看我的更新答案。它是一种类型。我相信它应该是缓冲区[1]==224。
/* 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))