Bruce.です。
ふたつまとめて。
davi さんは書きました:
> MSDNの引数説明、書式をどうにかして欲しいですね。
> ワザと理解しづらく書いているとしか思えん…。
基本的にあれは機械翻訳そのまま(らしい)ので、日本語で読みやすいことは期待
しないほうが
シアワセでいられると思います。
> でも、元のソースがシッカリしているので、言語を全く知らなくても
> 「多分、こんなことやってるんだろう。」と、流れを想像するだけで
> どうにかなってしまうのがスゴイというか、恐ろしいというか…。
> パソ通時代のプログラマは、やっぱり偉かったんだなぁ。
>
> ところで、fopen_sを使うと、出力の改行がCR+CR+LF(0D+0D+0A)に
> なっちゃいました。
呼び出した後は通常の fopen と変わらないはずなので、切り替えたことによって
改行がそのようになってしまったというのは考えづらいのですが。
そもそも、オープンモードで 'b' (binary) 指定しているんだし。
> 後の方の出力指定をしている所が c == '\n' となっていたのを
> c == '\r\n' としてみたり、色々試しましたが、どうも上手く
> 行きませんでした。
'' の中に書けるのは1バイト分だけです。'\r\n' とかしたら
警告が出ると思うんですが。
> で、結局、バイナリで読むのを諦めて、"r"だけにしたら、あっさり解決。
> 文字コード周りはホントに難しいですね…。
それ文字コード関係ありません><
>
> Bruce.さん < こん??は でび です
>
> On Wed, 24 Dec 2008 04:53:32 +0900
> "davi" <davi-1984@...> wrote:
>
>> > パソ通時代のプログラマは、やっぱり偉かったんだなぁ。
>
> に関連してなんですが、元のソースだと、
>
>> > if ((dt = Buf[list_s]) > 0xff)
>
>> > putchar((dt >> 8) | 0x80);
>
>> > if ((Buf[op] & 0x8000) != 0) {
>
>> > Buf[tmp_op] &= ~0x8000;
>
> のように、0x80や0xffや0x8000が頻出します。
>
> これって多分、S-JIS対応させるための処理とかなんでしょうけど、
> 0x80や0xffや0x8000は、それぞれ、如何なる意味で重要なのでしょうか?
>
> 0x80はS-JISやJISでのASCII文字の最後。
> 0xffはS-JISやJISでの半角部分(ASCII文字+半角カタカナ)の最後。
> という意味かな?と想像しましたが、それでOK?
>
> (なお、昔、PerlCGIとかで泣かされた、いわゆる「ダメ文字」処理の
> ようなものは入っていないようです。)
>
> あと、0x8000の意味がどうしてもわかりません。
> 10進に直しても、32768って数字には1024とか256みたいなキリの良さげな
> 感じがありません。
>
> S-JISで漢字開始なら8140とすべきだろうし、JISなら2120か2121だろうよ、と…。
>
> でも、常に読み込んだ文字列に付け足すとか、|で選択して0と比較するとか、
> そんな処理が頻出しているので、漢字コードの範囲指定ではなさそうな気も…。
この断片だけ見てもなんとも判断できませんが、0x80 や 0x8000 は
それぞれ char, (DOS用Cコンパイラの大半での) int の最上位ビットを示してま
すから
まあその辺でなんかやってるんでしょう。
0xffは unsigned char の max value ですね。
--
木村浩一/KIMURA Koichi
I thought what I'd do was, I'd pretend I was one of those deaf-mutes or
shoud I?
mail kbk at kt.rim.or.jp
web www.kt.rim.or.jp/~kbk/zakkicho/index.html