Hexdump 使用 c lseek() 读取偏移量

Hexdump read offset with c lseek()

我得到了一个图像文件 img.jpg 并执行了以下操作
strings img.jpg | hexdump -C
which gave me this output
现在我需要使用带有 open、lseek 和 read 的 c 程序来获取相机和日期信息... 我的问题是,如何使用 lseek 跳转到日期 2015:08:05?
我尝试使用偏移量 0x40 但真的不知道发生了什么......

编辑:正如答案中指出的那样,2015 年的 2 应该在 2015 年,但此代码不输出 2,而是输出 0。

int rd = lseek(filedesc, 0x49, SEEK_SET);


    if(rd < 0){
        perror("lseek");
        close(filedesc);
        return 1;
    }   

    read(filedesc, &output, 1);

    printf("%d", output);

0x40是代表行首的地址。 2015 中的 2 位于地址 0x49 - 这就是您需要的地址。其内容在 Hexa 中为 32 或在文本中为 2

在每一行中,地址都是这样 - 因为该行以 0x40:

开头

0x40 0x41 0x42 ... 0x48 0x49 0x4A 0x4B ... 0x4F。然后开始下一行。

文件中的列是:

  • 左栏 - 行中的第一个地址。
  • 中间一栏 - Hexa 中每个地址的内容。
  • 右栏 - 文本表示中每个地址的内容。

您当然应该检查每个 JPG 文件的偏移量是否正确。

添加:运行 hexdump -Cstrings img.jpg 上执行时和在 img.jpg 上执行时会给出不同的结果。如果您要在 文件 中搜索特定数据,您应该检查 cat img.jpg | hexdump -C那里 的偏移量将适合 fopen 文件的结果,然后 lseek 在其中。