Saya ingin mengambil bilangan bulat (yang akan menjadi <= 255), ke representasi string hex
misalnya: Saya ingin lulus 65
dan keluar '\x41'
, atau 255
dan masuk '\xff'
.
Saya sudah mencoba melakukan ini dengan struct.pack('c',
65 )
, tetapi itu tersedak apa pun di atas 9
karena ingin mengambil string karakter tunggal.
chr
tidak melibatkan ASCII sama sekali - hanya membutuhkan angka dan membuat bytestring satu byte di mana nilai ordinal byte adalah angka. Pengkodean yang kompatibel dengan ASCII dan ASCII mulai berlaku saat Anda menulis dan menampilkan bytestrings.'A'
cara lain untuk menulis dan menampilkan'\x41'
. Yangstr
benar-benar peduli adalah kenyataan ini enam puluh lima. Untuk membuat hal-hal dapat dimengerti dan digunakan oleh manusia, sering kali menjadi A.Ini akan mengonversi bilangan bulat menjadi string hex 2 digit dengan awalan 0x:
sumber
Bagaimana dengan
hex()
?Jika Anda benar-benar ingin berada
\
di depan, Anda dapat melakukannya:sumber
repr(chr(255)) # '\xff'
juga mencapai iniMencoba:
atau
Dokumentasi Python mengatakan: "simpan ini di bawah bantal Anda: http://docs.python.org/library/index.html "
sumber
Izinkan saya menambahkan ini, karena kadang-kadang Anda hanya ingin representasi satu digit:
Dan sekarang dengan
f''
string format baru yang dapat Anda lakukan:sumber
Jika Anda ingin mengemas struct dengan nilai <255 (satu byte tidak ditandatangani, uint8_t) dan berakhir dengan string satu karakter, Anda mungkin mencari format B alih-alih c . C mengubah karakter menjadi string (tidak terlalu berguna dengan sendirinya) sementara B mengubah bilangan bulat.
(Dan ya, 65 adalah \ x41, bukan \ x65.)
Kelas struct juga akan dengan mudah menangani endianness untuk komunikasi atau penggunaan lainnya.
sumber
Perhatikan bahwa untuk nilai besar,
hex()
masih berfungsi (beberapa jawaban lain tidak):Python 2:
0x4354467b746f6f5f736d616c6c3f7dL
Python 3:
0x4354467b746f6f5f736d616c6c3f7d
Untuk pesan RSA yang didekripsi, seseorang dapat melakukan hal berikut:
sumber
Ini bekerja paling baik untuk saya
Ubah (2) jika Anda ingin nomor dengan lebar lebih besar (2 untuk 2 karakter hex printned) sehingga 3 akan memberi Anda yang berikut
sumber
Saya ingin integer acak dikonversi menjadi string hex enam digit dengan # di awal. Untuk mendapatkan ini saya gunakan
sumber
"#%6x" % random.randint(0x0, 0xFFFFFF)
. (Ada yang hilang%
sebelum6
danrandint
mengambil 2 parameter -lebih rendah dan batas atas-)Dengan
format()
, sesuai format-contoh , kita dapat melakukan:sumber
Sebagai contoh:
sumber
Anda juga dapat mengonversi nomor apa pun di pangkalan apa pun menjadi hex. Gunakan kode satu baris ini di sini, mudah dan sederhana untuk digunakan:
hex(int(n,x)).replace("0x","")
Anda memiliki string
n
yang merupakan nomor Anda danx
pangkalan nomor itu. Pertama, ubah ke integer dan kemudian ke hex tetapi hex memiliki0x
pada awalnya jadi denganreplace
kita menghapusnya.sumber
Sebagai representasi alternatif yang bisa Anda gunakan
sumber