## はじめに
この記事ではchar[文字]型とint[整数]型の変換について解説します。
文字コードに関する話になるので、変換の仕組みはC言語以外でも同じだったりします。
## 先に方法から
int型変数をn、char型変数をcとしたとき、それぞれ変換する際は以下の方法があります。
n+'0'//整数→文字
c-'0'//文字→整数
使用例
#include<stdio.h>
int main(void){
int n = 5;
char c = '2';
printf("%c \n", n+'0');//整数→文字
printf("%d \n", c-'0');//文字→整数
return 0;
}
出力
5
2
きちんと変換できていますね。
では、この仕組みを解説していきます。
## 文字をint型として表示する
printf関数のフォーマット指定子で、char型ではなくint型の%dを使います。
試しに、以下の出力を見てみましょう。
printf("%d \n", '0');
printf("%d \n", 'a');
printf("%d \n", 'A');
出力
48
97
65
出力結果からは、表示された値は元の文字と関係ないように見えますね。
これは、int型として表示するとその文字の文字コードに表示されるからです。
## 文字コード表
文字コード | 文字 |
---|---|
46 | . |
47 | / |
48 | 0 |
49 | 1 |
50 | 2 |
51 | 3 |
52 | 4 |
53 | 5 |
54 | 6 |
55 | 7 |
56 | 8 |
57 | 9 |
58 | : |
59 | ; |
文字コードの変換方式はASCII、UTF-8、Shift-JISと様々あります。これらを含むほとんどの変換方式では、0~9の文字は順番に文字コードが割り当てられています。'0' の出力が48 の理由はここにあったんですね。 |
## 整数をchar型として表示する
前のプログラムの出力をchar型として表示してみましょう。
今度のフォーマット指定子はchar型の%cを使います。
printf("%c \n", 48);
printf("%c \n", 97);
printf("%c \n", 65);
出力
0
a
A
出力結果は、前のプログラムの文字になっていることが分かります。つまり、int型をchar型として表示した場合、その文字コードに割り当てられた文字が表示されているのです。
## 変換の仕組み
文字と文字コードの関係が分かったところで、初めに紹介した変換方法の仕組みが見えてきます。
文字コードの割り当ては順番に行われているので、これを利用し0の文字コードを基準に変換します。int型→char型の場合は0との和、char型→int型の場合は0との差で表すことができますね。
## 注意点
int,char型の値は、0~9でないと正常に動作しません。
もし変換を関数化する場合は、与えられた値の範囲に問題がないか確認するべきでしょう。
C言語では、0の文字コードを基準にするのではなく、単純に48を基準にする方法もあります。ですが、0の文字コードが48として割り当てられていない可能性も十分にありますし、尚且つ不自然なのでこれはやめるべきです。
## 参考
ASCII(Wikipedia)】