Jawaban:
Dari sini :
fungsi ord () akan mendapatkan nilai int dari char. Dan jika Anda ingin mengonversi kembali setelah bermain dengan angka, fungsi chr () berfungsi.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
Dalam Python 2, ada juga unichr
fungsinya, mengembalikan karakter Unicode yang ordinalnya adalah unichr
argumen:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
Di Python 3 Anda bisa menggunakan chr
bukan unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
,. Dalam Python 3 (atau unichr
Python 2), nomor input ditafsirkan sebagai Unicode codepoint integer ordinal: unichr(0x439) == '\u0439'
(256 bilangan bulat pertama memiliki pemetaan yang sama dengan latin-1 unichr(0xe9) == b'\xe9'.decode('latin-1')
:, 128 pertama - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')
itu adalah hal Unicode, bukan Python).
Catatan yang ord()
tidak memberi Anda nilai ASCII per se; itu memberi Anda nilai numerik karakter dalam apa pun penyandiannya. Oleh karena itu hasilnya ord('ä')
bisa menjadi 228 jika Anda menggunakan Latin-1, atau itu dapat meningkatkan TypeError
jika Anda menggunakan UTF-8. Ia bahkan dapat mengembalikan Unicode codepoint jika Anda memberikannya unicode:
>>> ord(u'あ')
12354
Anda mencari:
ord()
Jawaban yang diterima benar, tetapi ada cara yang lebih pintar / efisien untuk melakukan ini jika Anda perlu mengubah sejumlah besar karakter ASCII ke kode ASCII mereka sekaligus. Alih-alih melakukan:
for ch in mystr:
code = ord(ch)
atau yang sedikit lebih cepat:
for code in map(ord, mystr):
Anda mengonversi ke tipe asli Python yang mengulang kode secara langsung. Di Python 3, ini sepele:
for code in mystr.encode('ascii'):
dan pada Python 2.6 / 2.7, itu hanya sedikit lebih terlibat karena tidak memiliki bytes
objek gaya Py3 ( bytes
adalah alias untuk str
, yang beralih berdasarkan karakter), tetapi mereka memiliki bytearray
:
# If mystr is definitely str, not unicode
for code in bytearray(mystr):
# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):
Pengkodean sebagai jenis yang secara native diulang secara ordinal berarti konversi berjalan lebih cepat; dalam tes lokal pada Py2.7 dan Py3.5, iterasi a str
untuk mendapatkan kode ASCII menggunakan map(ord, mystr)
mulai mengambil sekitar dua kali lebih lama untuk len
10 str
daripada menggunakan bytearray(mystr)
pada Py2 atau mystr.encode('ascii')
pada Py3, dan str
semakin lama, pengali dibayar untuk map(ord, mystr)
kenaikan ke ~ 6.5x-7x.
Satu-satunya downside adalah bahwa konversi sekaligus, sehingga hasil pertama Anda mungkin memakan waktu sedikit lebih lama, dan yang benar-benar sangat besar str
akan memiliki sementara besar secara proporsional bytes
/ bytearray
, tetapi kecuali ini memaksa Anda ke halaman meronta-ronta, ini tidak mungkin menjadi masalah .