に進値を変換はASCII
'ffab12'
に
'\xff\xab\x12'
を翻訳する最も「Python的」な方法です私はそれを行うことができます機能のために見えたが、それらはすべてに翻訳したいですASCII(したがって'\x40'
〜'a'
)。私はASCIIで16進数字を持っています。
に進値を変換はASCII
'ffab12'
に
'\xff\xab\x12'
を翻訳する最も「Python的」な方法です私はそれを行うことができます機能のために見えたが、それらはすべてに翻訳したいですASCII(したがって'\x40'
〜'a'
)。私はASCIIで16進数字を持っています。
ちょうどこのための機能が含まれていbinascii
と呼ばれるモジュールがあります:
>>> import binascii
>>> binascii.hexlify('\xff\xab\x12')
'ffab12'
>>> binascii.unhexlify('ffab12')
'\xff\xab\x12'
original = '\xff\xab\x12'
result = original.replace('\\x', '')
print result
これはエスケープされているので、\x
です。 a.replace(b,c)
は、b
の出現をc
と置き換えただけで、a
になります。
asciiは0x41を 'A'に変換するので、あなたが望むのはasciiではありません。 \ x(または場合によっては0x)を除いた16進数で表示したいだけです
編集!
申し訳ありませんが、\ xがエスケープされていると思いました。だから、\ xシングル文字ではなく、4 ...
print "\x41"
が印刷され、2進数で表し、その後
だから私たちは何をすべきか、それぞれを変換することです
進にCHAR、そのようにそれを印刷:
res = "" for i in original: res += hex(ord(i))[2:].zfill(2) print res
それでは、このラインの上に行ってみよう:
hex(ord(i))[2:]
ord(c)
は - チャーc
hex(i)
の数値を返す - INTi
の16進数文字列値を返し(例えばi=65
場合には0x41
を返します。
[2:]
- "0x"接頭辞を16進文字列から切り捨てます。
.zfill(2)
- ゼロだから、でパディング、リストと理解がはるかに短くなることを作る:
result = "".join([hex(ord(c))[2:].zfill(2) for c in original]) print result
しかし、私の元の文字列はエスケープされません。私が言ったのは、「\ xff \ xab \ x12」です。 –
ああ、元の文字列(エスケープされていない)の場合は、私の答えを編集します:) –
そして、私はASCIIをサイトに送る必要があるので、ASCIIを必要とします。 –
あなたはPythonのバージョンを使用していますか? –
@JonClements 2.7.3 –