カレンダー最新コメント最新記事(03/29)
(11/09)
(06/29)
(02/10)
(09/19) 最新トラックバックプロフィールブログ内検索最古記事アクセス解析忍者アナライズ |
ブログ日記のようなものPAGE | 2118 2117 918 917 916 915 914 913 912 911 910 | ADMIN | WRITE 2009.08.23 Sun 20:02:20 だいぶ形になってきました昨日に引き続き、自作printfに挑戦中。
昨日のうちに10進数の正の整数なら表示できるようになってたけど・・・ 文字コードがshift-jisだったから、対DS用にutf-8に保存し直した。 オマケに使えるフォントは全角オンリーにしなきゃいけない。 もうこれだけで問題多数出てくるわけですよ。 普通に文字を表示するだけでも文字化け。 これを直すのに半日...orz ありえねぇよほんと。 文字コードの長さがコロコロ変わりやがる・・・!!! まず文字の最初の1バイトから全体の長さを割り出して、 1文字を表現するだけのバイト数を使って文字を表示して、 次の文字を読み込めるように、そのバイト数だけずらして・・・ なんとかバグは取れた。しかしまだまだ先は長い。 そもそも半角の文字を渡されても全角で表示しなきゃいけない罠。 大文字を小文字に、小文字を大文字に、なんて生温いもんじゃない。 えぇいめんどくせぇコレぐらい誰かやってないわけ!!? ググる。 ・・・あった。 ソースをコピー&ペーストして改造。 うむ。とりあえずなんとかなったっぽい。 でもって、フォーマット用の文字列だけでなく、%cで変数として 渡されたcharが表示できるのか、ということ。 何も考えずに表示しようとしたら案の定・・・没。 なんかオレchar*の中身見に行ってるな。 1文字のバイト数が固定じゃないんだから、中身を見ないといけないし。 ・・・あ。 va_arg( list, char* )での返り値char*には文字そのものの番地が入ってるだけで 変数の中身じゃないのか!!そりゃ変数使ってないもんなぁ・・・ ということで。 フガフガしつつも解決。 さて、8進数でも16進数でも表示できるようにした。 これはそんなに難しくない。元の数を10で割っていたのを、 8で割るか16で割るか、に変えればそれだけでOK。 さらに、負の整数も表示できるようにした。 これもそんなに難しくない。負が来たら"-"を表示して、 元の数字には-1をかけて正にして、あとは同じ処理でOK。 さて。unsignedも表示できるようにしてみた。 ここでまた苦戦。 unsignedはsignedで表現できる範囲を越えてしまう。 今の書き方じゃ絶対無理。 いや。まて。 負かどうか最初に判定した後、わざわざ正に直してで計算してるんだから、 ここunsignedでも問題ないじゃん。で、使ってる変数をunsignedに変えてみる。 で、unsignedで表示するかsignedで表示するかフラグ作って・・・ ・・・うん。なんとか解決。 では。 実際に使ってみる。 こう打ちました(比較のためにprintfでも表示してます) 実行。 表示されたけど。けど・・・!! 全角だとなんか・・・なんか・・・ッ!!!(汗汗汗) でもまぁ・・・いいでしょう。 いい加減グラフィック作ろう(まだやってないんかい) PR TrackbacksTRACKBACK URL : CommentsComment Form |