Apa cara yang benar untuk mengonversi byte ke string hex dengan Python 3?
Saya melihat klaim suatu bytes.hex
metode, bytes.decode
codec, dan telah mencoba fungsi lain yang mungkin paling tidak mengejutkan tanpa hasil. Saya hanya ingin byte saya sebagai hex!
python
python-3.x
hex
Matt Joiner
sumber
sumber
Jawaban:
Sejak Python 3.5 ini akhirnya tidak lagi canggung:
dan membalikkan:
bekerja juga dengan
bytearray
tipe yang bisa berubah .Referensi: https://docs.python.org/3/library/stdtypes.html#bytes.hex
sumber
bytes.fromhex()
juga tersedia di Python 3.0+ (bukan hanya 3.5+).bytes.hex()
hanya di Python 3.5+.Gunakan
binascii
modul:Lihat jawaban ini: Python 3.1.1 string ke hex
sumber
str
tetapi abytes
. Saya tahu bahwa OP tampaknya senang dengan jawabannya tetapi tidak akan lebih baik untuk memperluas jawaban ini untuk memasukkan.decode("ascii")
juga untuk mengubahnya menjadi "string"bytes
. Jika Andaprint(b'666f6f')
mendapatkanb
hasil cetakannya. Jika Anda.decode("ascii")
maka Anda tidak. Hanya memikirkan bagaimana mereka yang benar-benar memilikibytes
(biner sejati dengan item> 128, bukan string ascii) yang ingin mencetaknya..hex()
metode dalam Python 3.5+Python memiliki bytes-to-byte codec standar yang melakukan transformasi nyaman seperti dikutip-printable (cocok untuk 7bits ascii), base64 (cocok dengan alfanumerik), hex escaping, kompresi gzip dan bz2. Dengan Python 2, Anda bisa melakukan:
Dalam Python 3,
str.encode
/bytes.decode
secara ketat untuk byte byte konversi str. Sebagai gantinya, Anda bisa melakukan ini, yang berfungsi melintasi Python 2 dan Python 3 ( s / encode / decode / g untuk kebalikannya):Dimulai dengan Python 3.4, ada opsi yang kurang canggung:
Codec misc ini juga dapat diakses di dalam modul mereka sendiri (base64, zlib, bz2, uu, quopri, binascii); API kurang konsisten, tetapi untuk codec kompresi, ia menawarkan lebih banyak kontrol.
sumber
LookupError: unknown encoding: hex
binascii.hexlify(b'foo')
langsungbekerja di Python 3.3 (jadi "hex_codec" bukan "hex").
sumber
Metode ini
binascii.hexlify()
akan dikonversibytes
menjadibytes
string hex yang mewakili ascii. Itu berarti bahwa setiap byte dalam input akan dikonversi menjadi dua karakter ascii. Jika Anda ingin yang benarstr
maka Anda dapat.decode("ascii")
hasilnya.Saya menyertakan cuplikan yang menggambarkannya.
dari string hex
"0a160a04"
untuk bisa kembali kebytes
denganbinascii.unhexlify("0a160a04")
yang memberikan kembalib'\n\x16\n\x04'
sumber
OK, jawaban berikut sedikit di luar ruang lingkup jika Anda hanya peduli tentang Python 3, tetapi pertanyaan ini adalah hit Google pertama bahkan jika Anda tidak menentukan versi Python, jadi inilah cara yang berfungsi pada Python 2 dan Python 3 .
Saya juga menafsirkan pertanyaan tentang konversi byte ke
str
tipe: yaitu, byte-y pada Python 2, dan Unicode-y pada Python 3.Mengingat itu, pendekatan terbaik yang saya tahu adalah:
Pernyataan berikut akan berlaku untuk Python 2 atau Python 3, dengan asumsi Anda belum mengaktifkan
unicode_literals
masa depan di Python 2:(Atau Anda dapat menggunakan
''.join()
untuk menghilangkan ruang antara byte, dll.)sumber
dapat digunakan penentu
%x02
format format dan output nilai hex. Sebagai contoh:sumber
res.upper()
Baru di python 3.8, Anda bisa meneruskan argumen pembatas ke
hex
fungsi, seperti dalam contoh inihttps://docs.python.org/3/library/stdtypes.html#bytes.hex
sumber
Jika Anda ingin mengonversi b '\ x61' ke 97 atau '0x61', Anda dapat mencoba ini:
Referensi: https://docs.python.org/3.5/library/struct.html
sumber