2

16進数の文字列で最大値を見つけようとしています。私のアプローチは、文字列をトークン化し、そのトークンのリストをintに変換してから、最大値を取得することです。

文字列は次のようにフォーマットされます。

'\x1e\x00\x00\x00\xf0\x0f184203308373388492761797873987'

LZ4アルゴリズムのPythonバインディングの出力であるため、フォーマットを制御できません。

SOに関する他の同様の回答では、型が混在していないか、16進数が多い文字列でエスケープ文字を使用していません。

では、どうすればそれを次のようなリストに変換できますか。

[0x1e, 0x00, 0x00, ...]

ご協力ありがとうございました。

4

1 に答える 1

1

16 進数値の後に整数を取得する方法がわかりません... 1、2、またはx桁であるはずですか?

だから、私はこれを行います:

import re

# convert unicode or string to raw
def raw(s):
    if isinstance(s, str):
        s = s.encode('string-escape')
    elif isinstance(s, unicode):
        s = s.encode('unicode-escape')
    return s

s = '\x1e\x00\x00\x00\xf0\x0f184203308373388492761797873987'

print [ re.sub(r'\\', r'0', raw(i)) for i in s]

そして、私はこれを取得します:

['0x1e', '0x00', '0x00', '0x00', '0xf0', '0x0f', '1', '8', '4', '2', '0', '3', '3', '0', '8', '3', '7', '3', '3', '8', '8', '4', '9', '2', '7', '6', '1', '7', '9', '7', '8', '7', '3', '9', '8', '7']

それが役立つことを願っています

編集:リストの理解を簡素化

編集:実際に16進数以外の値を取り除きたい場合は、使用できます

>>> print [int(re.sub(r'\\', r'0', raw(i)), 16) for i in s if len(raw(i))>1]
[30, 0, 0, 0, 240, 15]

DSMが述べたように、比較...またはさらに良い方法

>>> s = '\x1e\x00\x00\x00\xf0\x0f184203308373388492761797873987'
>>> ord(max(s))
240
于 2012-06-07T16:36:39.243 に答える