gpt4 book ai didi

c - 使用 c lseek() 读取十六进制转储偏移量

转载 作者:行者123 更新时间:2023-11-30 14:57:02 25 4
gpt4 key购买 nike

我得到了一个图像文件 img.jpg 并执行了以下操作
字符串 img.jpg |十六进制转储-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 - 这就是您需要的地址。其内容为十六进制的 32 或文本的 2

在每一行中,地址都是这样的 - 以 0x40 开头的行:

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

文件中的列是:

  • 左列 - 行中的第一个地址。
  • 中间一栏 - 每个地址的十六进制内容。
  • 右栏 - 每个地址的文本内容。

您当然应该检查这个偏移对于每个 JPG 文件都是正确的。

补充:在字符串img.jpg上执行和在img.jpg上执行时,运行hexdump -C会给出不同的结果。如果您要在文件中搜索特定数据,您应该检查cat img.jpg |十六进制转储-C那里的偏移量将适合fopen文件的结果,然后lseek在其中。

关于c - 使用 c lseek() 读取十六进制转储偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44215960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com