LoginSignup
1
1

More than 3 years have passed since last update.

C言語でchar型とint型を変換したい

Last updated at Posted at 2020-02-18

 はじめに

この記事では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)】

1
1
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1