////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2003/09/29(Mon) No.225
    配信数： 2750 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００３年９月２９日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはー１話追加
　三人合体ホットハーブに１話追加。引きつづき築地母です。
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.biz/nikki2/index.html

2003/09/21 (Sun)
　ほとはーキャラ紹介……作るかも。ほとはー掲示板。プログラミングの
ページは作らないです。アニメはやっぱ土曜朝のがいい感じ。

2003/09/22 (Mon)
　お仕事は総合テスト開始。バグが〜。明日は休出……。なぜに松屋の麻婆
豆腐定食が延期？　築地母について。かなりかわいくなってしまった。

2003/09/23 (Tue)
　１時から９時まで休出。ハードディスク側の録画が不安定……。

2003/09/24 (Wed)
　金曜のためのドキュメント作り。 C でリンクトリストや可変長文字列を
作成。ユニットテストに過信は禁物？　ベレッタの実物がないと描きづら
い……。そして眠い。

2003/09/25 (Thu)
　明日のリリースに向けて。餓狼伝説ＤＶＤの勘違い。のんびりすると今日
の一枚が描けないから昨日描く。ヤフーディレクトリがリンクを変えてくれ
た。また BS-i ……。

2003/09/26 (Fri)
　真月譚月姫 prologue を買い逃す……。秋葉原行こうかなぁ。明日は午後
から休出。メインプロジェクトは今日リリース。ちゃんと動いたです。ステ
ルヴィア最終回。かぶろぐ。そしてアニメで普及。

2003/09/27 (Sat)
　１時から１１時まで休出。かなり変なオブジェクト指向……。リフレク
ションは危険だと思う。真月譚月姫 prologue 買えました。今日の一枚はリ
ングガンとメイドさん。そして打鍵数。そしてリブレット専門店。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第九章　四人　−１−

　呆然としてはいたが、このようなことはもう何度となく体験していた。隠
れている能力を引き出す力。鷹人との修練でこの体験を経る度に、技術が向
上している。
「だが」
　雅樹は剣を構え直す。
「今は、稽古の時間じゃないだろう」
　鷹人の表情が引き締まる。
「気が変わった。正直、もっと腕が立っていれば、あるいはと思っていたん
だが……」
「……！？」
　鷹人が滑るように進んでくる。肩で目付をしていた雅樹はすぐ反応できな
い。そして、恐怖で反射的に振り降ろした刀は空を切り、音もなく鷹人が脇
に回る。
「ちっ」
　返す刀で胴を薙ぎに行く。鷹人は刀を振り降ろして受けに行く。
「うぉおおおっ！」
　渾身の力を振り絞って剣を斬り上げる。完全に踏み込み、両足が大地に突
き刺さり、体を伸ばす力を使っての一撃は、素に近い立ち姿で、しかも回り
込んだばかりの鷹人に止められるはずがない。ここで押し上げて体制を立て
直す。
　ギッ。
　手首に衝撃が疾る。微動だにしていない鷹人とその刀は、まるで鋼鉄の柱
のように硬く、それを叩いた雅樹の手首に全ての力が集中した。人のそれの
２倍はあるかという太さでも、自分の力と相手の力の全てを受け入れること
はできなかった。
　痺れて、手を離し、刀が地面に刺さる。
　咄嗟に後ろへと下がり距離を取る。
　はずだったが、それ以上の距離を瞬時に踏み込んで、鷹人の切っ先が雅樹
の額に触れようとしていた。
「……」
「……つまり、こういうことだ」
　鷹人はため息をひとつついて、刀を鞘にしまった。
「……まさか、ここまで差がついていたとはなぁ……なんだ、今の」
「楠家に伝わるものだから、これは教えられないな」
「じゃあ俺は絶対鷹人に勝てねぇってことか？」
「もうろくして忘れたら勝てるかもな」
　はは、とふたりは笑った。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『最近更新とか落ち着いてきたね』
「ほとはー関係は準備してるみたいだけど」
『そういえば掲示板ってどうなったの？』
「まだ作ってる途中みたい」
『そんなんぱっぱと作ればいいのに』
「火美ちゃんも本格的なもの作ってみればわかるよ……」
『う”』
http://www.kab-studio.biz/
_______________________________________________________________[KCM]

////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 12.02
数字と文字列の変換

「今回は、数値と文字列の変換について説明します」
『それって結構重要？』
「重要。たとえば 01.txt から 10.txt までのファイルを読み込む、ってい
う時にべたに書くよりは」
『 for 使って数字に変換した方が楽ってことね』
「そういうこと。そういう場合のためにってことで。まず、基本的な考え方
から。たとえば」

    int i = 100;

「ってあった場合、 int の中には 0x00000064 が入っています。これを」

    char pch[256];

「の中に文字列として 100 が入ってる場合」

pch[0] == '1' == 0x31
pch[1] == '0' == 0x30
pch[2] == '0' == 0x30
pch[3] == \0  == 0x00

「という感じになっていればいいわけ」
『それぞれの文字コードが１文字ずつ入ってる……でも int とかなり違う
よね』
「そう。でも、簡単に変換できると思わない？」
『どうやって？』
「まず、 100 を１桁ずつに分けて考えます」
『んー、最初の 1 だとすると、それを pch[0] に入れるわけで、それが 0x
31 になればよくて、…… 0 の時は 0x30 だから……あ、 0x30 足して入れ
ればいいの？』
「そういうこと。１桁ずつ取り出して 0x30 足すとそれが文字コードの 0 
や 1 になるから、そうしたら１文字ずつ入れていけばいいわけ」
『なるほど、簡単そう』
「実際にやると大変なんだけど」
『へ？』
「１文字ずつ取り出すの、どうすればいいと思う？」
『えーっと……』
「こうします」

void GetFirst()
{
    int i = 105;
    // 5 だけ抜き出します。
    int i0 = i - ( ( i / 10 ) * 10 );
    TRACE( "%d\n", i0 );
    // 5
}

『 10 で割って 10 で掛ける？　それって一緒になるんじゃ』
「じゃないでしょ、 105 を 10 で割って 10 、 10 を掛けて 100 」
『１の位が 0 に……そか、それで引くと最初の桁だけ残るんだ！』
「そういうこと。で、これは１の位だけだから、実際のプログラムでは全部
の桁でしなきゃいけないし、桁数も取得しなきゃいけない」
『めんどー』
「だから普通はランタイム使います」
『……あるんじゃん』
「もちろん。というか使ったことあるでしょ。 sprintf() とか」
『あ！　そういえば』
「 Version 5.07 ( No.072 ) でやったね。それに、 CString なら 
CString::Format() ってメンバ関数があるからそっちの方がいいかも」
『どう違うの？』
「ほとんど同じ。

void Use_Format()
{
    CString cStr;
    cStr.Format( "%d", 100 );
    TRACE( "%s\n", cStr );
    // 100
}

『 %d とか、同じだね』
「 sprintf() も CString::Format() も、 TRACE() とかと同じ書式だか
ら」
『ひとつ憶えれば大丈夫ってわけね』
「でも、微妙な部分もあるかな」
『微妙？』
「このタイプのものの一番の問題は、型のチェックがされないっていう点。
たとえば」

void Use_Format_Bad()
{
    CString cStr;
    cStr.Format( "%s", 100 );
    // アクセス違反。
}

『あ、 Access Violation だ』
「つまり、 100 って数字を文字列のポインタと見なしちゃうから」
『げ、それってまずいじゃん』
「そう、まずいわけ。これは TRACE() でも起きるよ」

void Use_TRACE_Bad()
{
    TRACE( "%s\n", 100 );
    // アクセス違反。
}

『ホントだ起きる……』
「これは TRACE() や sprintf() や CString::Format() が【可変長引数】
っていうのを使ってるから」
『かへんちょーひきすう？』
「その可変長引数のおかげで、いくつつでも引数を渡すことができるんで
す」
『あ……つまりそれって、オーバーロードとか使ってないってこと？』
「いろんな型の引数をいくつも、なんて考えたらすごい数の組み合わせにな
っちゃうでしょ」
『確かに。だからその可変長引数ってのを使ってるわけね。で、それは型の
チェックができない、と』
「ありとあらゆる型が渡されるんだからしょうがないんだけどね。で、そう
いった場合に代わりになるのが Version 5.17 ( No.082 ) で教えた 
std::strstream とか」
『あー、ストリーム系ね』
「こっちはちゃんと型チェックされてるから大丈夫。ただ、使われてる割合
はかなり少ないから」
『少なくても、使っちゃえばいいじゃん』
「前も言ったけど、 C 言語しか使えないときもあるから。これは C++ でし
か使えないからね」
『……他の人と合わせなきゃとか、そーゆーのね』
「でも使えるんなら使った方がいいから。安全性ならこっちの方が上だか
ら」
『はーい』
「さて、ここまでは int を文字列にしてみました」
『……逆？』
「そう、今度は文字列を int にします」
『考え方って同じだよね。それぞれの文字で……今度は 0x30 を引けばいい
のかな』
「そうだね、文字を右から見ていって、 0x30 を引いて、あとは文字の位置
に合わせて 10 の何乗っていうのを掛ければいいかな」
『 10 の何乗？』
「右から２桁目なら 10 、３桁目なら 100 、４桁目なら 1000 を掛けて足
せば」
『そっか、それでできちゃうんだ』
「こっちの変換の方が簡単……と思うかもしれないけど、実はそうでもない
んです」
『ないの？』
「まぁその前に、まずランタイムを使った例から」

void Use_atoi()
{
    int i = atoi( "100" );
    TRACE( "%d\n", i );
    // 100
}

「こんな風に、ランタイムは atoi() を使えば変換できます」
『へー、簡単！　でも〈えーとぅーあい〉って変な名前……』
「呼び方は色々あると思うけどね。 ASCII to Int の略だと思うよ」
『 ASCII ？』
「ほら、普通の英文字を ASCII 文字って言うって」
『 Version 5.04 ( No.069 ) でやったね。そか、普通の文字から数字に変
換、って意味ね』
「で、この関数にはひとつ問題があります」

void Use_atoi_Bad()
{
    int i = atoi( "a" );
    TRACE( "%d\n", i );
    // 0
}

『ん？　数字以外が入ってると 0 になるんだ』
「もし "0" を変換したら？」
『 0 ……どっちも 0 ？』
「そう、この関数は、 0 が入ってたのか、それとも変換できなかったのか
がわかんないんです」
『げげげ』
「一応、ランタイムに isdigit() っていうのがあって、これで１文字ずつ
チェックできます」

void Use_isdigit()
{
    TRACE( "%d\n", isdigit( '1' ) );
    TRACE( "%d\n", isdigit( 'a' ) );
    // 4
    // 0
}

『 4 ？』
「まぁ、数字だったら 0 以外ってことになってるから、 0 かそうじゃない
かで調べた方がいいかな」
『ん。これ使って……１文字ずつ調べるの？』
「それだと面倒だから、 std::strstream とか使った方がいいかも」
『そっちなら大丈夫？　あ、そういえばファイルから取り出した時、 数字
とかじゃなかったら fail() がどうとかあったもんね』
「そういうこと。その辺の仕組みがあるから、ランタイムよりもいいかな。
まぁ関数ひとつで簡単に変換できるのは楽だけど」
『確かに std::strstream とかって使うの結構めんどいよね……』
「その辺も広まってない原因かも。ただ、こういう細かいところではまる事
って多いから、選択は気を付けてね」

/*
    Preview Next Story!
*/
『なんか今回って復習って感じ』
「それだけ憶えてきたことも多いってこと」
『そ？』
「でも憶えることはまだまだいっぱいあります」
『げ』
「というわけで次回」
＜ Version 12.03 パソコンは計算機 ＞
『につづく！』
「次回からはかなり難しいです！」
『あう〜』


////////////////////////////////////////////////////////////////////
/*                ２００３年１０月６日（月）の更新                */
http://www.kab-studio.biz/index.html

・１０月表紙壁紙……の予定
　毎月恒例、新しい表紙を……って思ってるんですが、忙しいんで微妙か
も（汗）。遅れても怒らないでね〜。

・ほとはー１話追加予定
　三人合体ホットハーブに１話追加予定。って、できるかなぁ（汗）。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

