0

バイナリ ファイルを読み取る既存の Python アプリを変更しています。ファイルの形式が少し変更されています。現在、1 つのフィールドはレコードのバイト 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ビットを読んでください(元のコードもその形式であるため、ビッグエンディアンであると思います):

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