サイトマップ / C言語講座>出入り口>総目次>目次:関数>文字の内部表現
/* コンピュータでは、文字も数字で管理されています。これを、文字の内部表現といいます。今日は、文字がメモリにどのようにしまわれているかを表示するプログラムを作ります。
unsigned char型の変数cを宣言して、forループでcの値を増加させながら、その値の文字を表示します。
しかし、文字のなかには表示できないものもあります。例えば、改行文字や、タブコードなどです。これらの文字をコントロール文字といいます。そこで文字の種類を調べて、表示可能なら表示して、できない文字はピリオッドを表示します。表示可能な文字か調べるには、isprint( )を使います。isprint( )は、ctype.hの中で、マクロとして定義されています。
#include <ctype.h> int isprint(char c); 例:isprint(c); 実行結果 戻り値 印刷可能 0以外の値 印刷不能 0
文字cが印刷可能(表示可能)ならば0以外の値を返します。
ソースプログラムのなかに次のコードがあります。
if (isprint(c)) putchar(c); else putchar('.');
印字可能ならその文字を表示して、そうでなければ'.'を表示します。
cの値は、forループの初期化の式で0X00に初期化されます。プログラムを実行すると、最初の方はコントロール文字が割り当てられているのがわかります。コントロール文字にどんなものがあるかを知るにはアスキーコード表を見て下さい。アスキーコードは、コンピュータのメモリー上での文字の内部表現です。
ソースプログラムでは、次に幾つかのアルファーベットと、その文字の値を、10進表現と16進表現で示します。
printf("%%c\t%%d\t%%X\n\n"); for (c = 'k'; c <= 'r'; c++) printf("%c\t%3d\t%X\n", c, c, c);
最初のprintf( )の中の"%%"は、"%"という文字を表示させます。"\t"はタブです。次のprintf( )の説明をします。"%c"はcの値を文字として表示し、"%3d"はcの値を3桁の10進数として表示する。"%X"はcの値を16進数として表示する。結局表示されたアルファベットのアスキーコードの値が、10進数と16進数で表示されます。 */
#include <stdio.h> #include <ctype.h> /* isprint( ) を使うために必要 */ void main(void); void main(void) { unsigned char c; for (c = 0X00; c < 0X88; c++) { if (isprint(c)) /* 印刷可能文字ならば */ putchar(c); /* 表示する */ else /* そうでなければ */ putchar( '.' ); /* ピリオッドを表示 */ if (!(c % 0X0F)) /* c が15で割り切れれば */ putchar('\n'); /* 改行する */ } printf("\n"); printf("%%c\t%%d\t%%X\n\n"); /* "%c %d %X"と表示 */ for (c = 'k'; c <= 'r'; c++) printf("%c\t%3d\t%X\n", c, c, c); } |
/* ソースプログラムを実行してみて下さい。'A'から'Z'と、'a'から'z'はメモリ上に連続して存在します。次の1行をソースプログラムに挿入すると、アルファーベットの小文字と大文字のメモリ上での距離がわかります。その値は、小文字から大文字、あるいは、大文字から小文字への変換に使えます。
printf(" 'a' - 'A' = %d\n", 'a' - 'A');
*/
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−