Dengan bantuan tautan yang baru saja Anda berikan kepada kami, saya menemukan fungsi yang Anda cari. Apa sebenarnya yang Anda coba dan mengapa itu tidak berhasil?
Vincent Savard
1
Saya mencoba yang berikut ini: >>> binascii.b2a_hqx ("0x7061756c") '- (Jh- $ Ba0c8fB`' >>> binascii.b2a_uu ("0x7061756c") "*, '@ W, # 8Q-S4V8P \ n" >>> binascii.b2a_base64 ("0x7061756c") 'MHg3MDYxNzU2Yw == \ n >>> binascii.b2a_qp ("0x7061756c")' 0x7061756c '>>> binascii.b2a3b3g3c33030330303303bbc3b3bbc3b3b3bc3g3bc3b3b3c3b3b3b3g3b3b3b3g3bcbnbbbfbbfpnnnnnnnnnnnnnnnnnnnng3b3bnbnn .b2a_hex (0x7061756c) Traceback (panggilan terakhir terakhir): File "<stdin>", baris 1, dalam <module> TypeError: harus berupa string atau buffer, bukan int >>>
Paul Reiners
Tak satu pun dari mereka yang bekerja, karena tak satu pun dari mereka mengembalikan 'paul'.
Paul Reiners
2
Bukankah maksud Anda "7-bit" ASCII? (Yang agak konyol karena ASCII hanya 7-bit.) GUID adalah 128bits ...
Terima kasih telah menunjukkan itu, saya tidak terbiasa dengan Python 3. Solusi ini juga tidak akan berfungsi dalam 1 sejauh yang saya tahu.
cjm
27
codecs.decode("7061756c", "hex")berfungsi untuk Python 2 dan Python 3. Tapi mengembalikan bytes()string dengan Python 3. Tapi itu masuk akal untuk string ASCII.
Solusi terbaik untuk saya (bekerja dengan python 3) karena bahkan menerima spasi:bytearray.fromhex("70 61 75 6C").decode()
Jona
bytearray.fromhex ("70e4756c"). decode (encoding = "Latin1") 'päul' Bagi kita yang bermain dalam biner, karakter yang diperluas tersedak oleh decode utf-8 default, selain itu, ini adalah jawaban yang paling portabel Saya melihat! Terima kasih!
grambo
Tentu saja Anda harus tahu yang sebenarnya pengkodean data jika itu harus ditafsirkan sebagai teks. Menggunakan 'latin-1'akan menghilangkan kesalahan tetapi mungkin menghasilkan omong kosong lengkap jika teksnya tidak benar-benar Latin-1.
tripleee
43
>>> txt ='7061756c'>>>''.join([chr(int(''.join(c),16))for c in zip(txt[0::2],txt[1::2])])'paul'
Saya hanya bersenang-senang, tetapi bagian-bagian penting adalah:
Inilah solusi saya ketika bekerja dengan hex integer dan bukan hex string:
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)
Memberi +1 untuk contoh yang bermanfaat, tetapi Anda tidak mengonversi "hex" sebagai input tetapi Anda mengonversi integer apa pun menjadi string hex. Kode Anda akan berfungsi sama baiknya dengan print convert_hex_to_ascii(123456).
Mark Lakata
5
Atau, Anda juga dapat melakukan ini ...
Penerjemah Python 2
print"\x70 \x61 \x75 \x6c"
Contoh
user@linux:~# python
Python2.7.14+(default,Mar132018,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:~#
atau
Python 2 One-Liner
python -c 'print "\x70 \x61 \x75 \x6c"'
Contoh
user@linux:~# python -c 'print "\x70 \x61 \x75 \x6c"'
p a u l
user@linux:~#
Penerjemah Python 3
user@linux:~$ python3
Python3.6.9(default,Apr182020,01:56:04)[GCC 8.4.0] on linux
Type"help","copyright","credits"or"license"for more information.>>>print("\x70 \x61 \x75 \x6c")
p a u l
>>>print("\x70\x61\x75\x6c")
paul
Python 3 One-Liner
python -c 'print("\x70 \x61 \x75 \x6c")'
Contoh
user@linux:~$ python -c 'print("\x70 \x61 \x75 \x6c")'
p a u l
user@linux:~$ python -c 'print("\x70\x61\x75\x6c")'
paul
Jawaban:
Solusi yang sedikit lebih sederhana:
sumber
.decode('hex')
pada Python 3..decode('hex')
digunakanbinascii.unhexlify()
pada Python 2 .codecs.decode("7061756c", "hex")
berfungsi untuk Python 2 dan Python 3. Tapi mengembalikanbytes()
string dengan Python 3. Tapi itu masuk akal untuk string ASCII.Tidak perlu mengimpor perpustakaan apa pun:
sumber
bytearray.fromhex("70 61 75 6C").decode()
'latin-1'
akan menghilangkan kesalahan tetapi mungkin menghasilkan omong kosong lengkap jika teksnya tidak benar-benar Latin-1.Saya hanya bersenang-senang, tetapi bagian-bagian penting adalah:
akan melihat binascii sekarang ...
keren (dan saya tidak tahu mengapa orang lain ingin membuat Anda melompat melalui lingkaran sebelum mereka akan membantu).
sumber
Dengan Python 2:
Dengan Python 3:
sumber
Inilah solusi saya ketika bekerja dengan hex integer dan bukan hex string:
sumber
print convert_hex_to_ascii(123456)
.Atau, Anda juga dapat melakukan ini ...
Penerjemah Python 2
Contoh
atau
Python 2 One-Liner
Contoh
Penerjemah Python 3
Python 3 One-Liner
Contoh
sumber
Diuji dengan Python 3.3.2 Ada banyak cara untuk mencapai ini, inilah salah satu yang terpendek, hanya menggunakan hal-hal yang disediakan python:
Tentu saja, jika Anda tidak ingin mengimpor apa pun, Anda selalu dapat menulis kode Anda sendiri. Sesuatu yang sangat mendasar seperti ini:
sumber
gunakan tanpa pembatas
sumber