如何使用 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,)
我正在尝试解压 python 中的 ElfHeader。 Elf64_Edhr 结构中 e_type
的类型是 uint16_t,如何解压它?我只在 python struct docs.
可能每个 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,)