最近、python/pyparsing を使用して 16 進値の文字列を処理し始めましたが、これに問題があります。次の文字列を検討してください。
string = "10020304059917368584304025326"
私は最終結果がこれであることを望みます:
['10', '02', '03', ['04', '05', '9917365843'], ['04', '02', '5326']]
04 がデータを意味するタグ (ASN.1 と同じ概念) であり、05 がそのデータのサイズであるとします。pyparsing コードでサイズ変数を使用する方法がわかりません。私ができる最善のことは次のとおりです。
byte = Word(hexnums, exact=2)
process = byte + byte + byte + Word(hexnums)
newstring = process.parseString(string)
print (newstring.dump())
どんな助けでも大歓迎です。
PS:Hookedの助けを借りて、私の最終的なコードは次のとおりです。
from pyparsing import *
string = "10 02 03 04 05 99 17 36 58 43 04 02 53 26"
tag = Word(hexnums, exact=2)
size = Word(hexnums)
array = Group(tag + countedArray(size))
process = tag + tag + tag + ZeroOrMore(array)
newstring = process.parseString(string)
print (newstring.dump())
どちらが印刷されますか:
['10', '02', '03', ['04', ['99', '17', '36', '58', '43']], ['04', ['53', '26']]]
これが将来役立つことを願っています。