[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[port139ml:02536] Re: SectorSpy



たかはしもとのぶです。

>>プログラム的には、「日本語」というよりも任意のバイナリ文字列でしょうね。
>
>イメージ的にはいわゆる strings コマンドの“日本語”対応版という
>感じだったりします。

ま、CPU に負担かけますが、「日本語」対応の strings コマンドは作って作
れなくはないと思います。
日本語の場合、何が難しいかというと、EUC-JP / Shift_JIS など複数の符号
化形式が混在していることに加え、あるバイトを取り出した時に、これが
ASCII か、日本語の 1 バイト目か 2 バイト目か、はたまた JIS の制御文字
かがわからないため、しばらく文字列を解析するまで判断を留保しないといけ
ないためです。

英語の場合、 2 バイト目云々の問題はないので、判断は即座に可能ですし、
符号化形式も (EBCDIC などを考慮しなければ) ASCII 1 通りだけなので、簡
単なロジックでできます。

たとえばこんな感じ。

#include <stdio.h>

#define LEN 5

int main(int argc, char *argv[]) {
    int c;
    int count = 0;
    int bPrint = 0;
    unsigned char buf[LEN+1] = {0};

    while ((c = getchar()) != EOF) {
        if (isprint(c) || isspace(c)) {
            if (count >= LEN) {
                count = 0;
                bPrint = 1;
                printf("%s", buf);
            }
            else if (bPrint)
                printf("%c", (unsigned char)c);
            else {
                buf[count] = (unsigned char)c;
                count++;
            }
        }
        else {
            if (bPrint)
                printf("\n");
            count = 0; bPrint = 0;
        }
    }
}

>といっても、TASK などでバイナリレベルで覗くなら、文字コードを
>判読できる知識を人間が持ってた方が役立つのだろうか?とちょっと
>感じてますです。

ですかね。

-----
TAKAHASHI, Motonobu (たかはしもとのぶ)         monyo@xxxxxxxxxxxxxx
                                               http://www.monyo.com/