从二进制文件创建16位和24位整数

时间:2013-02-12 19:20:38

标签: python binaryfiles

我正在修改一个读取二进制文件的现有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位整数?我已经尝试了一些我通过谷歌搜索找到的代码位,但我不认为它们是正确的。很难确定,因为我还在等待发送样本'新格式'文件的人发送给我一个文本表示,显示我应该提出的值。

1 个答案:

答案 0 :(得分:1)

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

val = struct.unpack('>I', b'\x00' + reg[34:37])