Bir karakterin ASCII değeri nasıl alınır


Yanıtlar:


1346

Gönderen burada :

fonksiyon ord () karakterin int değerini alır. Ve sayı ile oynadıktan sonra dönüştürmek istediğinizde, işlev chr () hile yapar.

>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

Python 2'de, sıralaması argüman olan Unicode karakterini unichrdöndüren fonksiyon da vardır :unichr

>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

Python 3'te chrbunun yerine kullanabilirsiniz unichr.


ord () - Python 3.6.5rc1 belgeleri

ord () - Python 2.7.14 belgeleri


chr kullanarak hangi kodlama?
njzk2

15
Chr'nin Python 3'te de unichr olarak davrandığını unutmayın. chr(31415) -> '窷'
William

6
@ njzk2: Python 2'de bir bytestring döndürdüğü herhangi bir karakter kodlaması kullanmaz. Bunu bir karakter olarak yorumlamak size kalmıştır, örn chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. Python 3'te (veya unichrPython 2'de) giriş numarası Unicode kod noktası tamsayı sıralaması olarak yorumlanır: unichr(0x439) == '\u0439'(ilk 256 tamsayı latin-1 ile aynı eşleşmeye sahiptir: unichr(0xe9) == b'\xe9'.decode('latin-1')ilk 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')bu bir Unicode şeyidir, değil Python).
jfs

4
Neden fonksiyona "ord" deniyor?
eLymar

6
@ eLymar: "düzen" ile benzer dil köklerine sahip "sıra" için kısadır - yani karakterin sembolik gösterimi yerine sayısal
Jacob Krall

166

ord()ASCII değerini size vermediğini unutmayın ; hangi kodlamada olursa olsun karakterin sayısal değerini verir. Bu nedenle ord('ä')Latin-1 kullanıyorsanız sonuç 228 olabilir veya TypeErrorUTF-8 kullanıyorsanız a değerini yükseltebilir . Unicode iletirseniz bunun yerine Unicode kod noktasını da döndürebilir:

>>> ord(u'あ')
12354

15
Belirli bir durumda hangi kodlamayı kullandığınızı nasıl öğrenebilirsiniz?
Bıyık

1
@Moustache: Python3'te, kutudan çıkar çıkmaz Unicode kullanacaksınız.
tricasse

Bağlıdır nesne türü . Python3 ( str ): unicodevarsayılan olarak. Python3 ( bayt ): str(b'\xc3\x9c', 'ascii')-> UnicodeDecodeError öğesini yükseltir . Python3 ( bayt ): str(b'\xc3\x9c', 'utf-8')-> Ü değerini döndürür . Ayrıca altı pakete de bakabilirsiniz .
nosahama


36

Kabul edilen cevap doğrudur, ancak bir sürü ASCII karakterini aynı anda ASCII kodlarına dönüştürmeniz gerekiyorsa bunu yapmanın daha akıllı / verimli bir yolu vardır. Yapmak yerine:

for ch in mystr:
    code = ord(ch)

veya biraz daha hızlı:

for code in map(ord, mystr):

kodları doğrudan yineleyen Python yerel türlerine dönüştürürsünüz. Python 3'te bu çok önemli:

for code in mystr.encode('ascii'):

ve Python 2.6 / 2.7'de, Py3 tarzı bir bytesnesneye sahip olmadığı için ( karakter bytesiçin stryinelenen bir takma addır ), ancak aşağıdakilere sahipler 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'):

Yerel olarak sıralı olarak yinelenen bir tür olarak kodlama, dönüşümün çok daha hızlı olduğu anlamına gelir; hem Py2.7 hem de Py3.5 üzerindeki yerel testlerde str, ASCII kodlarını kullanarak a'yı yinelemek, 10 için Py2 veya Py3'te kullanmaktan map(ord, mystr)yaklaşık iki kat daha uzun sürmeye başlar ve daha uzun sürdüğü zaman, çarpanlar yükselir ~ 6.5x-7x'e kadar.lenstrbytearray(mystr)mystr.encode('ascii')strmap(ord, mystr)

Tek dezavantajı, dönüşümün bir kerede olması, bu nedenle ilk sonucunuzun biraz daha uzun sürebileceği ve gerçekten muazzam strbir orantılı olarak büyük bir geçici olacağı bytes/ bytearrayancak bu sizi sayfanın daralmasına zorlamadığı sürece, bunun önemli olmadığı muhtemeldir. .


3

Bir karakterin ASCII kodunu almak için ord() işlevi .

İşte bir örnek kod:

value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)

Çıktı:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.