我正在修改一个读取二进制文件的现有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位整数?我已经尝试了一些我通过谷歌搜索找到的代码位,但我不认为它们是正确的。很难确定,因为我还在等待发送样本'新格式'文件的人发送给我一个文本表示,显示我应该提出的值。
答案 0 :(得分:1)
只需读取24位(我假设在big endian中,因为原始代码也采用该格式):
val = struct.unpack('>I', b'\x00' + reg[34:37])