サイトマップ / 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言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:関数>文字の内部表現