int型の整数値やfloat型の実数値を文字列や文字型の数字に変換する方法を紹介します。
目次
- 数値から数字に変換する(number to digit char,
9→'9') - int型からchar型へのキャストについて(cast int to char,
(char)9) - 数値から文字列に変換する(number to string,
99→"99")
数値から数字に変換する
int型の数値をchar型の数字に変換する方法です。
数値を文字型の数字に変換する場合には次のように、'0' + 数値という式を用います。
int i = 8;
char c = '0' + i;
printf("%c", c); // '8'
変換可能な数字は0〜9までの数値に限られます。
解説
原理は単純です。
文字'0'と'1'の内部表現はそれぞれ48と49という連番の整数値となっています。
int a = (int)'0'; // a == 48
int b = (int)'1'; // b == 49
ということは、文字'0'に数値1を足せば、演算結果は49となり、結果として文字'1'の数値と同じ値が導き出されることになります。
int a = (int)'0'; // a == 48
int b = (int)'1'; // b == 49
int A = a + 1; // A == 49
char c = A; // c == '1'
文字'2'の場合も同じです。文字'0'(数値: 48)の連番として数えると、文字'2'の内部値は50となるはずです。
| 文字定数 | 数値による表現 |
|---|---|
| '0' | 48 |
| '1' | 49 |
| '2' | 50 |
| '3' | 51 |
| '4' | 52 |
| '5' | 53 |
| '6' | 54 |
| '7' | 55 |
| '8' | 56 |
| '9' | 57 |
これらを踏まえて先程の'0' + 8例を説明しましょう。今回の例では、文字'0'に数値8を足していますから、演算結果はchar型の内部表現で56ということになります。そしてこの56という整数値は文字'8'の数値に相当します。
こうして'0' + 8は文字'8'に変換されるのです。
この原理を応用すれば、逆に「数字を数値に変換する('9' → 9)」ようなことも可能となります。少し考えてみてください。正解は以下のページが参考になります。
int型からchar型へのキャストについて
キャスト演算子による変換は、内部表現の複製のみが行われる点に注意して利用してください。
int i = 9;
char c = (char)i;
printf("%c", c); // '\t' ('9'に変換されるわけではない)
整数値9を文字型にキャストした場合、文字型の内部表現0x09に変換されます。
ASCIIコード表上では、0x09は水平タブ(\t)に相当します。そのため上記の例では数値9は数字'9'ではなくタブ文字'\t'に変換されてしまいます。
数値を数字に変換する方法については、本ページの「# 数値から数字に変換する」を参考にしてください。
数値から文字列に変換する
整数値や実数値を文字列に変換する方法については、以下のページを参考にしてください。