1

16進値を持つ圧縮ファイルからいくつかの負の値を読み取ろうとしています。

  • FFFFFFFF。-1である必要がありますが、4294967295と表示されます。
  • FFFFFFFE。-2である必要がありますが、4294967294と表示されます。

FFがマーカーになるはずですが、Pythonには値を直接読み取ることができるメソッドがありますか、それとも独自のメソッドを作成する必要がありますか?

ありがとうございました!

編集:これはPython2.6用です。私のプログラムはバイナリデータから読み取り、単純にするために16進数で表示しています。プログラムは、一度に4バイトを読み取るだけで、それらの4バイトから値を取得します。これらの値の一部が負であり、上記の数値を表示しているだけです。また、Pythonがバイナリデータを値に解釈する方法を誰かが説明して、逆プロトコルを記述できるようになることを望んでいます。ありがとうございました!

16進数から読み取り、このメソッドを使用して値に変換します。

def readtoint(read):
    keynumber = read[::-1]
    hexoffset=''
    for letter in keynumber:
        temp=hex(ord(letter))[2:]
        if len(temp)==1:
            temp="0"+temp
        hexoffset += temp
    value = int(hexoffset, 16)
    return value

4バイトを取得し、順序を逆にしてから、16進値をint値に変換します。上に投稿した値はすでに反転しています。

4

2 に答える 2

6

struct モジュールを使用します。

import struct

def readtoint(read):
    return struct.unpack('<i', read)[0]

例:

>>> readtoint('\xfe\xff\xff\xff')
-2
于 2012-05-31T12:28:02.433 に答える
0

完璧な答えを得るために、ファイル読み取りコードを投稿してください。しかし、あなたの質問への答えはほぼ確実にここにあります:

Pythonでバイナリファイルから整数を読み取る

于 2012-05-31T12:11:35.733 に答える