3

私はPythonでコードのこの部分を持っています:

for line in response.body.split("\n"):
    if line != "": 
        opg = int(line.split(" ")[2])
        opc = int(line.split(" ")[3])
        value = line.split(" ")[5]
        if command == 'IDENTIFY':
            if opg==opcodegroupr and opc==opcoder:
                print line
                ret['success'] = "IDENTIFY: The value is %s " % (value)
                self.write(tornado.escape.json_encode(ret))
                self.finish()

変数「line」は次のように作成されます。

1363005087 2459546910990453036 151 88 4 0x15000000

すべてのフィールドは整数ですが、最後のフィールドではありません。最後のフィールドは 16 進数です。

私はこの16進数を取り、バイトごとに分割した後です。たとえば、0x15000000 は 15 00 00 00 に分割されます。

どのようにできるのか?value.encode("hex") を試してみましたが、正常に動作しません... 値は文字列ですか? この変数をどのように考慮するかわかりません..

4

3 に答える 3

5

16 進値が既にテキストである場合は、これ以上変換する必要はありません。

>>> text = "0x15000000"
>>> text = text[2:]  # remove literal type prefix
>>> text = text.zfill(len(text) + len(text) % 2)  # pad with zeros for even digits
>>> ' '.join(text[i: i+2] for i in range(0, len(text), 2))  # split into 2-digit chunks
'15 00 00 00'

(ゼロパディングに関する@tobias-kの提案に従って編集)

于 2013-03-11T12:49:21.953 に答える
3

これを試して:

def split_hex(value):
    value = value[2:] if len(value) % 2 == 0 else "0" + value[2:]
    return " ".join(value[i:i+2] for i in range(0, len(value), 2))

16 進数の桁数が奇数の場合、先頭に 0 を追加して適切にバイトに分割する必要があることに注意してください。

print split_hex("0x1234567")
>>> 01 23 45 67
于 2013-03-11T12:51:57.600 に答える
0
value = line.split(" ")[5]

value変換していないため、文字列です。int(value, 16)たとえば、を使用して16進文字列からintを作成できます

>>> int('0x15000000', 16)
352321536
于 2013-03-11T12:49:42.703 に答える