为什么我遇到段错误(二进制数据解析)c

知道

我一次扫描原始位512字节。如果前4个字节与jpeg文件后缀匹配,那么我将创建一个新的jpeg并将该块以及所有后续块写入其中,直到遇到新的jpeg后缀。

由于某种原因,它会在第一个写调用之后的读调用中发生错误。

/ ** * recovery.c * *计算机科学50 *问题集4 * *从法医图像中恢复JPEG。* /

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

typedef uint8_t  BYTE;

int main(int argc, char* argv[])
{
    //load in file
    FILE* file = fopen("card.raw", "r");
    FILE* newfile = NULL;

    //error opening file
    if (file==NULL){
        return 1;
    }

    //create buffer and outfile index
    BYTE buffer[512]; //
    int filecount = 0;
    char newfilename[3];

    //iterate through file, break on eof
    while (1){//(!feof(file)){//(fgetc(file) != EOF){

        //seek back to 512 block start
        //fseek(file,-1,SEEK_CUR);
        //fread(&buffer,1,512,file);
        if (fread(buffer,512,1,file) <= 0){
            break;
        }

        //Check if first 4 bytes are jpeg signature
        if ((buffer[0] == 0xff &&
             buffer[1] == 0xd8 &&
             buffer[2] == 0xff &&
             buffer[3] == 0xe0)||
            (buffer[0] == 0xff &&
             buffer[1] == 0xd8 &&
             buffer[2] == 0xff &&
             buffer[3] == 0xe1 )){

            //close out previously created jpeg
            if (newfile != NULL){
                //file close error
                if (fclose(newfile) == EOF){
                    return 2;
                }
                newfile = NULL;
            }

            //create new jpeg
            sprintf(newfilename,"%03d.jpeg",filecount++);
            newfile = fopen(newfilename,"w");

        }

        //Write blocks to newfile
        if (newfile != NULL){
            if (fwrite(buffer,512,1,newfile) <= 0){
                return 4;
            }

        }
    }

    //close out last newfile 
    if (newfile != NULL){
        //file close error
        if (fclose(newfile) == EOF){
            return 3;
        }
        newfile = NULL;
    }

    //close infile
    fclose(file);



//we should find 16 images


}
风向标

文件名没有足够的数组

char newfilename[3];

当你做

sprintf(newfilename,"%03d.jpeg",filecount++);

这将需要

char newfilename[9];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的函数的输出为二进制?

来自分类Dev

为什么我的补丁以二进制格式发布?

来自分类Dev

为什么我会执行二进制文件错误?

来自分类Dev

为什么我的数据段在已编译的二进制文件中出现两次?Ubuntu,x86,nasm,gdb,reaelf

来自分类Dev

我们为什么不使用简单的二进制值来压缩数据

来自分类Dev

Java解析二进制数据

来自分类Dev

为什么我编译的 C++ 二进制文件不能执行?

来自分类Dev

C ++解析二进制plist

来自分类Dev

我可以执行驻留在数据段(ELF二进制)中的代码吗?

来自分类Dev

我可以执行驻留在数据段(ELF二进制)中的代码吗?

来自分类Dev

我为什么得到“受支持的目标类型为:('二进制','多类')。取而代之的是'连续'。” 错误?

来自分类Dev

为什么我不能在C#中将对象序列化为二进制格式?

来自分类Dev

为什么我的过滤图像(应该是二进制的)仍然包含彩色部分?(C ++中的OpenCV)

来自分类Dev

为什么“二进制文件”不在原始二进制文件中?

来自分类Dev

为什么可以匀称地解析这个“无效的”众所周知的二进制文件?

来自分类Dev

为什么我必须使用ld链接我的二进制文件

来自分类Dev

为什么二进制数据文件比数据大?

来自分类Dev

为什么在二进制搜索中使用中间表达式的上限值是错误的?

来自分类Dev

为什么此代码给出错误而不是给出二进制数?

来自分类Dev

为什么源给出错误“无法执行二进制文件”

来自分类Dev

为什么二进制文件上的grep -P有时匹配错误的字节?

来自分类Dev

解析二进制文件。什么是现代方式?

来自分类常见问题

为什么输入后我的二进制搜索脚本无法执行?

来自分类Dev

为什么我的二进制搜索实现效率很低?

来自分类Dev

为什么我应该放弃加二进制数的过程?

来自分类Dev

为什么我的系统仅在/ snap中查找二进制文件?

来自分类Dev

为什么我的二进制到英语代码不起作用?

来自分类Dev

为什么我使用curl获得二进制输出

来自分类Dev

为什么二进制搜索在我的测试中不起作用?

Related 相关文章

  1. 1

    为什么我的函数的输出为二进制?

  2. 2

    为什么我的补丁以二进制格式发布?

  3. 3

    为什么我会执行二进制文件错误?

  4. 4

    为什么我的数据段在已编译的二进制文件中出现两次?Ubuntu,x86,nasm,gdb,reaelf

  5. 5

    我们为什么不使用简单的二进制值来压缩数据

  6. 6

    Java解析二进制数据

  7. 7

    为什么我编译的 C++ 二进制文件不能执行?

  8. 8

    C ++解析二进制plist

  9. 9

    我可以执行驻留在数据段(ELF二进制)中的代码吗?

  10. 10

    我可以执行驻留在数据段(ELF二进制)中的代码吗?

  11. 11

    我为什么得到“受支持的目标类型为:('二进制','多类')。取而代之的是'连续'。” 错误?

  12. 12

    为什么我不能在C#中将对象序列化为二进制格式?

  13. 13

    为什么我的过滤图像(应该是二进制的)仍然包含彩色部分?(C ++中的OpenCV)

  14. 14

    为什么“二进制文件”不在原始二进制文件中?

  15. 15

    为什么可以匀称地解析这个“无效的”众所周知的二进制文件?

  16. 16

    为什么我必须使用ld链接我的二进制文件

  17. 17

    为什么二进制数据文件比数据大?

  18. 18

    为什么在二进制搜索中使用中间表达式的上限值是错误的?

  19. 19

    为什么此代码给出错误而不是给出二进制数?

  20. 20

    为什么源给出错误“无法执行二进制文件”

  21. 21

    为什么二进制文件上的grep -P有时匹配错误的字节?

  22. 22

    解析二进制文件。什么是现代方式?

  23. 23

    为什么输入后我的二进制搜索脚本无法执行?

  24. 24

    为什么我的二进制搜索实现效率很低?

  25. 25

    为什么我应该放弃加二进制数的过程?

  26. 26

    为什么我的系统仅在/ snap中查找二进制文件?

  27. 27

    为什么我的二进制到英语代码不起作用?

  28. 28

    为什么我使用curl获得二进制输出

  29. 29

    为什么二进制搜索在我的测试中不起作用?

热门标签

归档