Câu trả lời:
Từ đây :
Hàm ord () sẽ lấy giá trị int của char. Và trong trường hợp bạn muốn chuyển đổi trở lại sau khi chơi với số, hàm chr () thực hiện thủ thuật.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
Trong Python 2, cũng có unichrhàm, trả về ký tự Unicode có thứ tự là unichrđối số:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
Trong Python 3 bạn có thể sử dụng chrthay vì unichr.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. Trong Python 3 (hoặc unichrtrong Python 2), số đầu vào được hiểu là thứ tự số nguyên mã Unicode: unichr(0x439) == '\u0439'(256 số nguyên đầu tiên có cùng ánh xạ với latin-1 : unichr(0xe9) == b'\xe9'.decode('latin-1'), 128 - ascii đầu tiên: unichr(0x0a) == b'\x0a'.decode('ascii')không phải là một thứ Unicode Con trăn).
Lưu ý rằng ord()không cung cấp cho bạn giá trị ASCII mỗi se; nó cung cấp cho bạn giá trị số của ký tự trong bất kỳ mã hóa nào. Nó là kết quả ord('ä')có thể là 228 nếu bạn đang sử dụng Latin-1 hoặc nó có thể tăng TypeErrornếu bạn đang sử dụng UTF-8. Nó thậm chí có thể trả về mã điểm Unicode thay vào đó nếu bạn chuyển nó thành một unicode:
>>> ord(u'あ')
12354
Bạn đang tìm kiếm:
ord()
Câu trả lời được chấp nhận là chính xác, nhưng có một cách thông minh / hiệu quả hơn để làm điều này nếu bạn cần chuyển đổi một loạt các ký tự ASCII thành mã ASCII của chúng cùng một lúc. Thay vì làm:
for ch in mystr:
code = ord(ch)
hoặc nhanh hơn một chút:
for code in map(ord, mystr):
bạn chuyển đổi sang các loại bản địa Python lặp lại các mã trực tiếp. Trên Python 3, nó không quan trọng:
for code in mystr.encode('ascii'):
và trên Python 2.6 / 2.7, nó chỉ liên quan nhiều hơn một chút vì nó không có bytesđối tượng kiểu Py3 ( byteslà bí danh str, lặp lại theo ký tự), nhưng chúng có 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'):
Mã hóa như một kiểu lặp đi lặp lại theo quy tắc có nghĩa là việc chuyển đổi diễn ra nhanh hơn nhiều; trong các thử nghiệm cục bộ trên cả Py2.7 và Py3.5, việc lặp lại strđể lấy mã ASCII của nó bằng cách sử dụng map(ord, mystr)bắt đầu mất khoảng gấp đôi thời gian cho len10 strso với sử dụng bytearray(mystr)trên Py2 hoặc mystr.encode('ascii')trên Py3, và càng strlâu, số nhân càng được trả cho map(ord, mystr)tăng đến ~ 6,5x-7x.
Nhược điểm duy nhất là chuyển đổi tất cả cùng một lúc, do đó, kết quả đầu tiên của bạn có thể mất một chút thời gian và thực sự rất lớn strsẽ có một tỷ lệ tạm thời lớn tương đối bytes/ bytearray, nhưng trừ khi điều này buộc bạn phải đập trang, điều này không có vấn đề gì .