Обновление :
Спасибо за помощь, я разобрался! Я должен был увеличить I, когда я использовал
putc(input_char, output_file);
input_char = chars[i+1];
putc(input_char, output_file);
input_char = chars[i+2];
putc(input_char, output_file);
input_char = chars[i+3];
putc(input_char, output_file);
У меня есть файл с несколькими изображениями в формате JPEG. Мне нужно поместить каждое изображение в отдельный файл. Я уже положил файл в:
unsigned char* chars;
которое я сделал равным:
chars = (unsigned char*) malloc (sizeof(unsigned char)*count+1);
(количество - общее количество байтов)
Вот большая часть моего кода. Я пытаюсь заставить работать только одно изображение, прежде чем просмотреть весь файл. Я думал, что это будет работать, но я не могу получить изображение. Я получаю файл с именем image.jpg с большим количеством байтов, но без изображения. Кажется, что в самом начале файла что-то не так, но я не уверен в этом. Любые советы или советы будут оценены. Заранее спасибо.
FILE* output_file;
unsigned char input_char;
for(i=0; i <=count-3 && flag2==0; i++)
{
input_char = chars[i];
if ((chars[i] == 0xff ) &&
(chars[i+1] == 0xd8) &&
(chars[i+2] == 0xff) &&
(chars[i+3] == 0xe0))
{
if (flag==1) {
puts("closing file I");
fclose(output_file);
puts("closed I");
flag2 = 1;
break;
}
pictures++;
puts("New pic! I");
puts("Opening file I!");
output_file = fopen("image.jpg", "wb");
putc(input_char, output_file);
input_char = chars[i+1];
putc(input_char, output_file);
input_char = chars[i+2];
putc(input_char, output_file);
input_char = chars[i+3];
putc(input_char, output_file);
flag = 1;//there is at least one image, so it will need to be closed
}
else if ((chars[i] == 0xff) &&
(chars[i+1] == 0xd8) &&
(chars[i+2] == 0xff) &&
(chars[i+3] == 0xe1))
{
if (flag==1) {
puts("closing file II");
fclose(output_file);
puts("closed II");
flag2 = 1;
break;
}
pictures++;
puts("New pic II!");
puts("Opening file! II");
output_file = fopen("Image.jpg", "wb");
putc(input_char, output_file);
input_char = chars[i+1];
putc(input_char, output_file);
input_char = chars[i+2];
putc(input_char, output_file);
input_char = chars[i+3];
putc(input_char, output_file);
flag = 1;//there is at least one image, so it will need to be closed
}
else
{
if (flag==1) //There is an image opened
{
putc(input_char, output_file);
}
}
}