如何使用 uint16_t 类型解压结构 python

how to unpack a struct with uint16_t type in python

我正在尝试解压 python 中的 ElfHeader。 Elf64_Edhr 结构中 e_type 的类型是 uint16_t,如何解压它?我只在 python struct docs.

中找到了一种解压 4 位 unsigned int 的方法

可能每个 Python 支持的机器每个字节都有 8 位,因此 16 位整数使用 2 个字节。我们希望每台机器上的大小都相同,所以我们查看 standard size 列。标准大小为 2 个字节或 16 位的无符号整数的格式为 H.

要使标准大小相关,unpack 模式必须以 <>!= 开头,具体取决于字节序。 ELF 支持小端和大端值,具体取决于文件偏移量 0x05 处的字节,因此您的模式将以 <> 开头,具体取决于文件的字节顺序。

  • 如果偏移量 0x05 处的字节是 1,它是一个小端文件,所以你的模式必须以 <.
    [=26 开头=]

    LE uint16_t 0x3456 = 13398 是 b'\x56\x34'

    >>> x = b'\x56\x34'
    >>> struct.unpack('<H', x)
    (13398,)
    
  • 如果偏移量 0x05 处的字节是 2,它是一个大端文件,所以你的模式必须以 >.
    [=26 开头=]

    BE uint16_t 0x3456 = 13398 是 b'\x34\x56'

    >>> x = b'\x34\x56'
    >>> struct.unpack('>H', x)
    (13398,)