読者です 読者をやめる 読者になる 読者になる

C言語で入力された文字の文字コードを16進数で出力する

1文字入力して、その文字コードを16進数に変換するプログラムを作ってみましょう。

f:id:ruruganbaru:20161226105907j:plain:w300

さて、文字コードとは「何?」というところですが、簡単に言うと、一つ一つの文字に対応している数字のことです。

そういうものがあるんだな、というざっくりとしたイメージをもっているだけでいいです。

進数についてですが、こちらの記事がとてもわかりやすいので、一度読むべきだと思います!

www.chishikiyoku.com

こちらは、続編。

www.chishikiyoku.com

なるほど!

はい、それでは、ソースコードです。

#include <stdio.h>
int main(void) {
int c;/*cは整数だよ*/
printf( "Input a character:" );
c = getchar(); /*1文字入力*/
printf( "character code for '%c' = 0x%02x\n", c, c );
return 0; 
}

別解

#include <stdio.h>
int main(void) {
char c;/*cは文字だよ*/
printf( "Input a character:" );
scanf("%c",&c); /*1文字入力*/
printf( "character code for '%c' = 0x%02x\n", c, c );
return 0; /* 文字コードを16進数で出力 */
}

実行


Input a character:a

character code for 'a' = 0x61


Input a character:A

character code for 'A' = 0x41



解説

0x%02xとは、なにか。

0x →16進数だよという印です。

%02x →16進数2桁だよ。


二つの解答例からもわかるように、getchar、scanfのどちらかを使うかで、最初の変数宣言を変えないといけないので、まちがえないようにしましょう。

進数の練習をもう少ししたいという方は、こちらもどうぞ!

このソースコードで、どんな実行結果が得られるかな?

#include<stdio.h>
int main(void){
printf("atai = %d\n", 12); 
printf("atai = %d\n", 012); 
printf("atai = %d\n", 0x12); 
return 0;
}

実行


atai = 12

atai = 10

atai = 18


解説

それぞれ異なる進数で表されている3つの数字を、10進数に変換するプログラムです。

%dは、10進数に変換してね、という命令です。 (ちなみに、%oなら8進数、%xなら16進数)

□普通の数字(0から始まらない)なら10進数。ex.)14,5678

□0から始まる数字なら8進数。ex.)045,0987

□0xから始まる数字なら16進数。ex.)0x35,0xfa

です。

12・・・10進数

012・・・8進数

0x12・・・16進数

というわけですね。

高校生のとき、進数をいじるために習ったあの計算なんかしなくても、プログラミングでぱっと答えを出すことができます。

がんばるぞっ!