/* * mydump.c --- 日本語 EUC のテキスト・ファイルを dump する * コンパイル: gcc -o mydump mydump.c */ #include /* ファイル fp の内容を標準出力に出力する */ void print_file(FILE * fp) { int c, c2; /* ファイルの終りまで一文字ずつ c に読み込み、標準出力に書き出す */ while ((c = getc(fp)) != EOF) { if (c >= 0x80) { /* 0x80 以上だったら漢字の 1 バイト目だと判断して もう 1 バイト読んで、まとめて出力する。 */ c2 = getc(fp); printf("0x%02x 0x%02x: %c%c\n", c, c2, c, c2); } else if (c < 0x20 || c == 0x7f) /* 0x20 未満または 0x7f の場合は制御文字なので文字コードのみ表示 */ printf("0x%02x\n", c); else /* それ以外の場合は文字コードと、その文字自身を出力 */ printf("0x%02x: %c\n", c, c); } } int main(int argc, char **argv) { int i; FILE *input; if (argc == 1) /* コマンドライン引数がないときは標準入力を print_file する */ print_file(stdin); else for (i = 1; i < argc; i++) { /* argv[i] をファイル名として読み込み用のオープンをする */ input = fopen(argv[i], "r"); if (input == NULL) { fprintf(stderr, "cannot open %s\n", argv[i]); break; } print_file(input); fclose(input); } return 0; }