Pythonのchr関数とord関数を使って文字列と整数を変換する方法

スポンサーリンク

Pythonの組み込み関数chr()は整数を文字に変換するために使われ、関数ord()はその逆、つまり文字を整数に変換するために使われます。

この2つの関数を簡単に見て、どのように使用できるかを理解しましょう。


スポンサーリンク

chr() 関数

構文

これは整数 i を受け取り、それを文字 c に変換して文字列を返す。

書式は以下の通り。

c = chr(i)

以下はその例です。

# Convert integer 65 to ASCII Character ('A')
y = chr(65)
print(type(y), y)
 
# Print A-Z
for i in range(65, 65+25):
    print(chr(i), end = " , ")

結果は以下の通りです。

<class 'str'> A
A , B , C , D , E , F , G , H , I , J , K , L , M , N , O , P , Q , R , S , T , U , V , W , X , Y , Z

引数の有効範囲は 0 から 1,114,111 (16進数で 0x10FFFF) までです。

整数iがその範囲外であれば、ValueErrorが発生します。

それでは、いくつかの例で検証してみましょう。

print(chr(-1))

これは ValueError を発生させます。

ValueError: chr() arg not in range(0x110000)
start = 0
end = 1114111
 
try:
    for i in range(start, end+2):
        a = chr(i)
except ValueError:
    print("ValueError for i =", i)

結果は以下の通りです。

ValueError for i = 1114112

ord() 関数

ord() 関数は、単一の Unicode 文字からなる文字列を引数に取り、その Unicode コードポイント値を整数値で返します。

これは chr() の逆を行います。

構文

これは Unicode 文字 (長さ 1 の文字列) を 1 つ受け取り、整数を返すので、フォーマットは次のようになる。

i = ord(c)

この関数が chr() の逆を行うことを確認するために、いくつかの例を使ってこの関数をテストしてみましょう。

# Convert ASCII Unicode Character 'A' to 65
y = ord('A')
print(type(y), y)
 
alphabet_list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 
# Print 65-90
for i in alphabet_list:
    print(ord(i), end = " , ")

結果は以下の通りです。

<class 'int'> 65
65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 ,

これは、入力文字列の長さが1でない場合、TypeErrorを発生させる。

y = ord('Hi')

結果は以下の通りです。

TypeError: ord() expected a character, but string of length 2 found

16進数データの受け渡し

chr() や ord() では、16進数のような他の一般的なベースで表現された整数を渡すこともできます。

Python では、整数の 32/64 ビットの範囲内であれば、整数の前に 0x を付けることで16進数を使用することができます。

>>> print(hex(18))
'0x12'
>>> print(chr(0x12))
'x12'
>>> print(ord('x12'))
18
>>> print(int('x12'))
18

16進数の整数値 18 を chr() に渡すと、16進数の 0x12 が返されます。

これを chr() に渡し、 ord() を使って整数を返します。

1 文字の文字列も文字列なので、 int() を使っても整数を得ることができることに注意してください。


まとめ

この記事では、chr()ord() を使って、整数を文字に変換したり、逆に文字を文字に変換したりする方法を学びました。


タイトルとURLをコピーしました