【问题标题】:Compare byte in unsigned char with hex, test if file is ELF file将 unsigned char 中的字节与十六进制进行比较,测试文件是否为 ELF 文件
【发布时间】:2014-02-03 11:51:24
【问题描述】:

我需要测试一个文件是否是 ELF 文件,为此,我必须比较前四个字节。文件的第一个字节以0x7F 0x45 0x4C 0x46 开头。

我使用 fread(...) 将前四个字节读入一个数组。打印数组的内容表明该文件包含上面描述的十六进制数字。

我尝试了一些简单的方法来比较每个字节与十六进制代码,像这样

if(bytes[0] != "0x7f" || bytes[1] != "0x45 ....) printf("Error, not ELF file")

但据我了解,我无法以这种方式比较字节。我应该以哪种方式比较数组中的内容以使其正确?

【问题讨论】:

  • 我在您的比较中看到的唯一问题是您将字节值视为字符串。删除引号。
  • if(!memcmp(bytes, "\x7F\x45\x4C\x46", 4))

标签: c arrays compare byte elf


【解决方案1】:

您读取的字节不是字符串,它们是单个字节。所以比较例如bytes[0]0x7f(整数文字而非字符串)或 127 十进制或 0177 八进制。

【讨论】:

    【解决方案2】:

    你当然不能那样比较字节;您正在将单个字符与指向字符串文字的指针进行比较。不太对。

    你只需要这样做:

    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 */
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 2020-07-06
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2014-08-12
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多