2016-06-20 7 views
1

に進値を変換はASCII

'ffab12' 

'\xff\xab\x12' 

を翻訳する最も「Python的」な方法です私はそれを行うことができます機能のために見えたが、それらはすべてに翻訳したいですASCII(したがって'\x40''a')。私はASCIIで16進数字を持っています。

+0

あなたはPythonのバージョンを使用していますか? –

+0

@JonClements 2.7.3 –

答えて

4

ちょうどこのための機能が含まれていbinasciiと呼ばれるモジュールがあります:

>>> import binascii 
>>> binascii.hexlify('\xff\xab\x12') 
'ffab12' 
>>> binascii.unhexlify('ffab12') 
'\xff\xab\x12' 
0
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)の数値を返す - INT iの16進数文字列値を返し(例えばi=65場合には0x41を返します。
[2:] - "0x"接頭辞を16進文字列から切り捨てます。
.zfill(2) - ゼロだから、

でパディング、リストと理解がはるかに短くなることを作る:

result = "".join([hex(ord(c))[2:].zfill(2) for c in original]) 
print result 
+1

しかし、私の元の文字列はエスケープされません。私が言ったのは、「\ xff \ xab \ x12」です。 –

+0

ああ、元の文字列(エスケープされていない)の場合は、私の答えを編集します:) –

+0

そして、私はASCIIをサイトに送る必要があるので、ASCIIを必要とします。 –