web-dev-qa-db-ja.com

16進数でエンコードされたASCII文字列をプレーンASCIIに変換しますか?

Pythonでどうやってhexからplain ASCIIに変換できますか?

たとえば、 "0x7061756c"を "paul"に変換したいと思います。

121
Paul Reiners

もう少し簡単な解決策:

>>> "7061756c".decode("hex")
'paul'
207
cjm

ライブラリをインポートする必要はありません。

>>> bytearray.fromhex("7061756c").decode()
'paul'
75
user4369081
>>> txt = '7061756c'
>>> ''.join([chr(int(''.join(c), 16)) for c in Zip(txt[0::2],txt[1::2])])
'paul'                                                                          

私はただ楽しんでいますが、重要な部分は以下のとおりです。

>>> int('0a',16)         # parse hex
10
>>> ''.join(['a', 'b'])  # join characters
'ab'
>>> 'abcd'[0::2]         # alternates
'ac'
>>> Zip('abc', '123')    # pair up
[('a', '1'), ('b', '2'), ('c', '3')]        
>>> chr(32)              # ascii to character
' '

今binasciiを見ていきます...

>>> print binascii.unhexlify('7061756c')
paul

かっこいい(そして私は彼らが助ける前に他の人々があなたがフープを飛び越えるようにしたいのか分からない)。

43
andrew cooke

Python 2では

>>> "7061756c".decode("hex")
'paul'

Python 3では

>>> bytes.fromhex('7061756c').decode('utf-8')
'paul'
6
Julien

これは、16進文字列ではなく16進整数を扱うときの私の解決策です。

def convert_hex_to_ascii(h):
    chars_in_reverse = []
    while h != 0x0:
        chars_in_reverse.append(chr(h & 0xFF))
        h = h >> 8

    chars_in_reverse.reverse()
    return ''.join(chars_in_reverse)

print convert_hex_to_ascii(0x7061756c)
5
carloserivera

Python 3.3.2でテストするこれを実現するには多くの方法があります。ここではPythonが提供するものだけを使用して、最も短い方法の1つを示します。

import base64
hex_data ='57696C6C20796F7520636F6E76657274207468697320484558205468696E6720696E746F20415343494920666F72206D653F2E202E202E202E506C656565656173652E2E2E212121'
ascii_string = str(base64.b16decode(hex_data))[2:-1]
print (ascii_string)

もちろん、インポートしたくない場合は、いつでも自分のコードを書くことができます。このような非常に基本的なもの:

ascii_string = ''
x = 0
y = 2
l = len(hex_data)
while y <= l:
    ascii_string += chr(int(hex_data[x:y], 16))
    x += 2
    y += 2
print (ascii_string)
3

また、これを行うことができます...

Pythonインタプリタ

print "\x70 \x61 \x75 \x6c"

user@linux:~# python
Python 2.7.14+ (default, Mar 13 2018, 15:23:44) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "\x70 \x61 \x75 \x6c"
p a u l
>>> exit()
user@linux:~# 

または

Python One-Liner

python -c 'print "\x70 \x61 \x75 \x6c"'

user@linux:~# python -c 'print "\x70 \x61 \x75 \x6c"'
p a u l
user@linux:~# 
2
Sabrina