Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21081

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

$
0
0

 はじめに

この記事ではchar[文字]型とint[整数]型の変換について解説します。
文字コードに関する話になるので、変換の仕組みはC言語以外でも同じだったりします。

 先に方法から

int型変数をn、char型変数をcとしたとき、それぞれ変換する際は以下の方法があります。

n+'0'//整数→文字c-'0'//文字→整数
使用例
#include<stdio.h>
intmain(void){intn=5;charc='2';printf("%c \n",n+'0');//整数→文字printf("%d \n",c-'0');//文字→整数return0;}
出力
5
2

きちんと変換できていますね。
では、この仕組みを解説していきます。

 char型をint型として表示する

printf関数のフォーマット指定子で、char型ではなくint型の%dを使います。
試しに、以下の出力を見てみましょう。

printf("%d \n",'0');printf("%d \n",'a');printf("%d \n",'A');
出力
48
97
65

出力結果からは、表示された値は元の文字と関係ないように見えますね。
これは、int型として表示するとその文字の文字コードに表示されるからです。

 文字コード表

文字コード文字
46.
47/
480
491
502
513
524
535
546
557
568
579
58:
59;

文字コードの変換方式はASCII、UTF-8、Shift-JISと様々あります。これらを含むほとんどの変換方式では、0~9の文字は順番に文字コードが割り当てられています。'0'の出力が48の理由はここにあったんですね。

 int型を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として割り当てられていない可能性も十分にありますし、尚且つ不自然なのでこれはやめるべきです。

 参考

char型をint型に変換する方法と注意【数値化 キャスト 文字列変換】
ASCII(Wikipedia)


Viewing all articles
Browse latest Browse all 21081

Trending Articles