0

我正在修改一个现有的读取二进制文件的 Python 应用程序。文件的格式发生了一些变化。目前,一个字段被定义为记录的 35-36 字节。规范还声明“......记录中的字段将是用 ASCII 编写的字符字段。” 这是当前工作代码的样子:

def to_i16( word ):
    xx = struct.unpack( '2c', word )
    xx = ( ord( xx[ 0 ] ) << 8 ) + ord( xx[ 1 ] )

    return xx

val = to_i16( reg[ 34:36 ] )

但是该字段被重新定义为字节 35-37,因此它将是一个 24 位值。我讨厌使用二进制文件,并且对比特玩弄很可怕。如何将该 3 字节值转换为 24 位整数?我尝试了一些通过谷歌搜索找到的代码位,但我认为它们不正确。很难确定,因为我仍在等待发送示例“新格式”文件的人向我发送显示我应该提出的值的文本表示。

4

1 回答 1

1

只需读取 24 位(我假设为big endian,因为原始代码也是该格式):

val = struct.unpack('>I', b'\x00' + reg[34:37])
于 2013-02-12T19:27:25.580 回答