この投稿の内容:文字列を16進バイトとして出力しますか?文字列として16進バイトの「配列」に出力する方法を学びました。今は別の方法が必要です。
したがって、たとえば、入力は次のように73.69.67.6e.61.74.75.72.65
なり、出力は文字列になります。
この投稿の内容:文字列を16進バイトとして出力しますか?文字列として16進バイトの「配列」に出力する方法を学びました。今は別の方法が必要です。
したがって、たとえば、入力は次のように73.69.67.6e.61.74.75.72.65
なり、出力は文字列になります。
binascii
組み込みモジュールを使用できます。ただし、この関数は ASCII エンコード文字でのみ機能することに注意してください。
binascii.unhexlify(hexstr)
ただし、入力文字列はドットなしである必要がありますが、単純な
string = string.replace('.','')
別の (おそらくより安全な) 方法は、base64 を次のように使用することです。
import base64
encoded = base64.b16encode(b'data to be encoded')
print (encoded)
data = base64.b16decode(encoded)
print (data)
またはあなたの例では:
data = base64.b16decode(b"7369676e6174757265", True)
print (data.decode("utf-8"))
b16decode
文字列は、メソッドに入力する前にサニタイズできます。b
私はpython 3.2を使用しており、バイトを表すために文字列の先頭に必ずしも必要ではないことに注意してください。
なしbinascii
:
>>> a="73.69.67.6e.61.74.75.72.65"
>>> "".join(chr(int(e, 16)) for e in a.split('.'))
'signature'
>>>
またはそれ以上:
>>> a="73.69.67.6e.61.74.75.72.65"
>>> "".join(e.decode('hex') for e in a.split('.'))
PS: ユニコードで動作します:
>>> a='.'.join(x.encode('hex') for x in 'Hellö Wörld!')
>>> a
'48.65.6c.6c.94.20.57.94.72.6c.64.21'
>>> print "".join(e.decode('hex') for e in a.split('.'))
Hellö Wörld!
>>>
編集:
ここではジェネレーター式は必要ありません (thx から thg435):
a.replace('.', '').decode('hex')
文字列分割を使用して文字列のリストを取得し、バイトをデコードするために base 16 を使用します。
>>> inp="73.69.67.6e.61.74.75.72.65"
>>> ''.join((chr(int(i,16)) for i in inp.split('.')))
'signature'
>>>