私は次のような16進文字列を持っています:
data = "437c2123"
この文字列をASCIIテーブルに従って文字のシーケンスに変換したいと思います。結果は次のようになります。
data_con = "C|!#"
誰かがこれを行う方法を教えてもらえますか?
Python2の場合
>>> "437c2123".decode('hex')
'C|!#'
Python3の場合(Python2でも機能します。2.6未満の場合b
、文字列の前に接頭辞を付けることはできません)
>>> import binascii
>>> binascii.unhexlify(b"437c2123")
b'C|!#'
In [17]: data = "437c2123"
In [18]: ''.join(chr(int(data[i:i+2], 16)) for i in range(0, len(data), 2))
Out[18]: 'C|!#'
ここ:
for i in range(0, len(data), 2)
data
:0
、2
などの2番目の位置ごとに繰り返します4
。data[i:i+2]
16進数のすべてのペアなどを調べ'43'
ます'7c'
。chr(int(..., 16))
16進数のペアを対応する文字に変換します。''.join(...)
文字を1つの文字列にマージします。Python 2.6以降、単純に使用できます。
data_con = bytes.fromhex(data)
このord
関数は文字を数値に変換し、chr
関数はその逆を行います。したがって、に変換97
するに"a"
は、ord(97)