【发布时间】:2011-03-07 02:08:47
【问题描述】:
我正在使用 C 语言处理一个小项目,我必须解析一个未记录文件格式的二进制文件。由于我是 C 的新手,所以我有两个问题想问一些更有经验的程序员。
第一个似乎很容易。如何从二进制文件中提取所有字符串并将它们放入数组中?基本上我正在寻找 C 中 strings 程序的简单实现。
当我在任何文本编辑器中打开二进制文件时,我会得到很多垃圾,其中混入了一些可读的字符串。我可以在命令行中使用 strings 提取这些字符串。现在我想在 C 中做一些类似的事情,就像下面的伪代码一样:
while (!EOF) {
if (string found) {
put it into array[i]
i++
}
return i;
}
第二个问题稍微复杂一些,我相信它是实现相同目标的正确方法。当我在 HEX 编辑器中查看文件时,很容易注意到一些模式。例如,在每个字符串之前有一个值为 02 (0x02) 的字节,后跟字符串的长度和字符串本身。例如 02 18 52 4F 4F 54 4B 69 57 69 4B 61 4B 69 是字符串部分加粗的字符串。
现在我正在尝试创建的函数将像这样工作:
while(!EOF) {
for(i=0; i<buffer_size; ++i) {
if(buffer[i] hex value == 02) {
int n = read the next byte;
string = read the next n bytes as char;
put string into array;
}
}
}
感谢您的任何指点。 :)
【问题讨论】:
-
TLV - 类型、长度、值 - 编码很常见。你的例子不是决定性的;长度 0x18 后面应该跟一个 24 字节的字符串,但你只显示 12 个字节……它是在计算 nybbles 而不是字节?
-
是的,它似乎只计算单个十六进制数字,因此以字节为单位的字符串长度将为 n/2。