【发布时间】:2020-11-04 16:10:54
【问题描述】:
我有关于二进制文件结构的说明,我正在尝试构建解析器以从二进制文件中获取信息。在遇到以下情况之前,我做得很好:
从 DWORD 大小 = 0 开始。您将通过以下方式重建大小 获取 7 位数据包:
获取一个字节。
将此字节的前 7 位添加到 Size。
检查此字节的第 7 位(最后一位)。如果开启,则返回 1. 处理下一个字节。
要恢复,如果 Size
我感到困惑的是“从字节中获取位”和“检查字节的最后一位”的含义。 这是我从文件中读取字节的方式:
from struct import *
#..... some other blocks of code
self.standard = {"DWORD":4,"WORD": 2,"BYTE": 1,"TEXT11": 1,"TEXT12": 2}
st = st = self.standard
size = 0
data = unpack("b", f.read(st["BYTE"]))
#how to get bits???
if size < 128:
#use st["TEXT11"]
elif size < 16384:
#use st["TEXT12"]
【问题讨论】:
-
它实际上并没有说“从一个字节中获取位”。作者所说的“最后一位”显然是指价值的最高位。
-
@Kinrad Rudolph 一开始我也是这么认为的,但我认为它们在第 3 步中参考 0 编号,例如 0、1、2、3、4、5、6、7。所以 7 基本上是第 8 位
-
@KonradRudolph 在讨论数据格式时,值的位通常从 0 向上编号,因此字节大小的值的最高有效位是位 7,而不是(不存在的)位 8。