我需要测试文件是否是精灵文件,为此,我必须比较前四个字节。文件的第一个字节从0x7F 0x45 0x4C 0x46
开始。
我使用架子(...)将前四个字节读取到数组。打印数组的内容显示文件包含所描述的十六进制编号。
我尝试了一些简单的方法来将每个字节与十六进制代码进行比较,例如
if(bytes[0] != "0x7f" || bytes[1] != "0x45 ....) printf("Error, not ELF file")
,但据我了解,我无法以这种方式比较字节。我应该以哪种方式比较数组中的内容以使其正确?
您阅读的字节不是字符串,它们是单个字节。因此,比较例如 bytes[0]
带有 0x7f
(整数文字而不是字符串)或 127
十进制或 0177
八十位。
您当然无法以这种方式比较字节;您正在将单个字符与指针进行字符串文字进行比较。没有太多正确的。
您只需要做:
if(bytes[0] != 0x7f || bytes[1] != 0x45 || /* more */)
只需确保bytes
是unsigned char
。
您还可以通过使用功能使其更清楚:
const unsigned char header[] = { 0x7f, 0x45, 0x4c, 0x46 };
if(memcmp(bytes, header, sizeof header) != 0)
{
/* bad header */
}