C-将无符号字符中的字节与十六进制进行比较,测试文件是否为ELF文件



我需要测试文件是否是精灵文件,为此,我必须比较前四个字节。文件的第一个字节从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 */)

只需确保bytesunsigned char

您还可以通过使用功能使其更清楚:

const unsigned char header[] = { 0x7f, 0x45, 0x4c, 0x46 };
if(memcmp(bytes, header, sizeof header) != 0)
{
  /* bad header */
}

相关内容

  • 没有找到相关文章

最新更新