有关在C++中解析二进制文件的问题
Question about parsing a binary file in C++
所以我得到了这个面试作业,这似乎有点令人困惑。
我的工作是,我得到了几个二进制文件(例如联系人,电话等(,我需要提取尽可能多的信息。
我使用十六进制恶魔解码了二进制文件(十六进制恶魔的图片在这里(,我得到了调用应该是什么样子的图片(这里的调用图片(。
我的任务是C++,我设法提取了电话号码和"TO"标签等信息,但所有其他数据似乎都无法作为字符读取。它是否编码为 ascii 消息,例如标头的描述,标签应该在哪里,或者它应该损坏/不可读?
我也应该能够提取日期和持续时间。
到目前为止,我已经解析了该文件,因此当一个字符小于或等于 31 并且大于或等于 127 时将其替换为空格,以便我可以看到对应于实际数据的字母/数字,例如电话号码。
我解决这类问题的主要想法是弄清楚二进制文件的结构。
例如,01020304可能是一个标头,表示这是一个日志并且有数据。
关于如何解决其余问题的任何想法?
提前感谢!
此文件看起来像是包含固定长度的记录,可以选择带有标头。 我测量了其中两个EFCD标记(0x34e和0x3b8(之间的距离,得出了106(或0x6a(。尝试调整十六进制查看器的大小,使 106 是确切的行数。
6360 是 106 的精确倍数,因此似乎没有页眉或页脚。
让我们详细看一下记录。我选择了从0x1a8开始的那个,因为它有一些我们可以查看的文本。
- 偏移0x00:对于其中一些标记,某种序列号似乎有所不同。我们不知道它有多大,所以现在让我们猜 4 个字节。
- 偏移量0x04:对于大多数记录,这是 FF00 或 FF02。 2 字节。
- 偏移0x06:几乎总是FFFF,但并非总是如此。还有 2 个字节?
- 偏移量0x0C:这隐约看起来像时间戳? 4 字节
- 偏移0x10:最后,我们认识一些文字!看起来它在 UCS-2 中,中间有所有这些 00 字节。由于记录的大小是固定的,因此为 0x1e2-0x1b8=42 字节。
- 偏移0x58:所拨号码的数字。这可能也是固定大小。
还有一些东西需要找出来,但我会把它留给你。 作为最后一个提示,使用 Kaitai struct (http://kaitai.io/( 之类的东西来编写二进制格式的与语言无关的定义,您可以从中生成各种语言的解析器。
相关文章:
- 有关在C++中解析二进制文件的问题
- 创建二进制文件时出现问题
- 在 64 位 Linux armv8 计算机上编译 32 位二进制文件时遇到问题
- 读取二进制文件时出现问题
- MPI 二进制文件 I/O 基本功能和性能问题
- 快速读取带有数字 c++ 的二进制文件时出现问题
- 通过C 读取二进制文件的问题
- 读取C++中的二进制文件时出现问题
- Wxwidgets 在另一台计算机上运行二进制文件时出现问题
- 读取二进制文件并转换为整数数组时出现问题
- 读取二进制文件时使用的变量的问题
- 使用字符串流处理二进制文件时出现问题
- 将整数写入二进制文件C++时出现问题
- C++三维模型io、二进制文件读取(badbit)和#DEN问题
- 协议缓冲区问题,多个序列化成一个二进制文件
- 试图读取二进制文件c++时的问题
- c++二进制文件读取问题
- c++中二进制文件中读写数组结构的问题
- unix多次并行运行一个C++二进制文件是否存在问题
- C++,序列模式下二进制文件的问题