我是编程新手,我有一个预制代码,其中部分计算基于从BLOB文件中提取一些信息 我想我已经在代码中找到了正在阅读信息的地方,但我不明白:
unsigned short decode_le16(byte *buf) {
return buf[0] | (buf[1] << 8);
}
unsigned int decode_le32(byte *buf) {
return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24);
}
BLOB包含字符和数字,但这些信息是如何读取的?如果不事先了解布局,我如何才能看到BLOB的结构?
答案 0 :(得分:2)
decode_le16
“le”代表little endian。 16是以位为单位的大小。该代码采用两个(8位)字节,并使用移位和按位OR运算将它们组合成16位整数,这是一种解码与字节顺序无关的二进制格式的相当标准的方法。
如何阅读此信息
问题中未显示的某些代码必须使用文件I / O从文件中检索字节数组。然后将该数组逐个馈送到decode_le16
之类的函数。然后,其他一些代码将这些整数,字符和诸如此类的东西组装成更高级别的数据结构。
如果不事先了解布局,我如何才能看到BLOB的结构?
你不能,BLOB不是按照定义构造的,它们只是位/字节的数组。如果您必须知道并且您没有在某处记录格式,则必须通过跟踪上述应用程序代码对其进行逆向工程。