C言語-文字列処理 |
コンピュータ内では、すべてのデータが0と1の2進数で記憶されるので、文字(キャラクタ)には1文字ずつ番号が割り当てられている。これを文字コードまたはキャラクタコードなどと呼ぶ。
日本では、漢字を扱う必要があるが、各漢字にもコードが決められている。ただし、漢字は種類が多く、1バイトでは足りないのでコードは2バイトで決められている。
MS-DOSやWindowsではシフトJISコード、UNIXの多くはEUCコードである。
第1バイト | 第2バイト | |
JISコード | 0x21 - 0x98 | 0x21 - 0x7E |
シフトJISコード(S-JIS) | 0x81 - 0x9F, 0xE0 - 0xFC | 0x40 - 0x7E, 0x80 - 0xFC |
EUCコード | 0xA1 - 0xFE | 0xA1 - 0xFE |
char型変数は1バイト分の領域しかないので、文字列や漢字コードを扱う場合には、配列を使用しなければならない。
入力した1文字の文字と文字コードを表示する。 [pro1-1.c]
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: |
#include <stdio.h> int main(void) { char c; printf("文字 = "); /* プロンプト表示 */ c = getchar(); /* 1文字入力 */ printf("%c(%X) ", c, c); /* 出力 */ return(0); } |
文字 = a |
実行結果のように文字aを入力すると、変数cには文字aの文字コード0x61(16進数)が格納される。8行目の関数printfで%cで表示させると変数cの値を文字コードとして、対応する文字が表示され、%Xで表示すると変数cの値を16進数で表示する。ちなみに、%dで表示すると10進数で表示される。
入力した整数10進数を文字コードとして、対応する文字とその文字コードを表示する。 [pro1-2.c]
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: |
#include <stdio.h> int main(void) { int d; printf("整数10進数 = "); scanf("%d", &d); printf("%c(%X) ", d, d); return(0); } |
<整数10進数 = 100 d(64) |
整数10進数 = 300 ,(12C) |
実行結果のように整数値を入力すると、それに対応する文字と16進数を表示する。2つ目の実行例では、入力データが1バイトを超えているが、%cは下位1バイト(2C)だけを処理する。
Copyright © 2001 Hiroshi Masuda |