[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[port139ml:02536] Re: SectorSpy
- To: port139ml@xxxxxxxxxxxxx
- Subject: [port139ml:02536] Re: SectorSpy
- From: TAKAHASHI Motonobu <monyo@xxxxxxxxxxxxxx>
- Date: Sun, 02 Mar 2003 18:12:12 +0900
たかはしもとのぶです。
>>プログラム的には、「日本語」というよりも任意のバイナリ文字列でしょうね。
>
>イメージ的にはいわゆる 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/