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'
に変換されてしまいます。
数値を数字に変換する方法については、本ページの「# 数値から数字に変換する」を参考にしてください。
数値から文字列に変換する
整数値や実数値を文字列に変換する方法については、以下のページを参考にしてください。