在python中读取此文件的正确方法是什么?

时间:2021-04-23 06:29:18

标签: python endianness

我正在尝试解析包含网络数据包转储的二进制文件。网络数据包的规范说它遵循 Big Endian 格式。以下是文件的片段

0400 0001 004f 1a04 595a 2a2a 3132 3300
4000 054d aee0 1f00 001c 2240 2802 0bfa
818b 00e0 4c01 b969 3220 a000 0900 5a00
0300 a300 0100 004f 6a40 7132 6086 0113

在我的系统上,python 正在读取 Little Endian 格式的文件。我知道我可以在 python 的 struct 模块的 unpack 函数中设置格式字符串以将数据解包为 Big Endian 格式。但是,我不确定读取文件或将字节传递给 unpack 函数的顺序,主要是因为我不了解 Endianness 在文件上下文中的工作原理。

考虑到数据包的前 8 个字节代表以下结构

typedef struct
{
    CHAR cCompOrNot; # 1 byte
    SHORT nDataSize; # 2 bytes
    SHORT iNoOfPackets; # 2 bytes
}ST_COMP_BATCH_HEADER

python中应该如何读取数据?

第一个字节是一个标志 (0/1),它表明数据是否被压缩。考虑到这一点,我尝试使用以下代码从第一行读取 003332312a 以及 000401004f

import struct

data = b'\x00\x04\x01\x00\x4f'
s = struct.unpack(">chh", data)
print(s)

哪个输出

(b'\x00', 1025, 79)

这是有道理的。

但我想确保这是正确的。

0 个答案:

没有答案