忍者ブログ

カレンダー

02 2025/03 04
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

最新コメント

[07/13 ♀はっか]
[07/13 ♀はっか]
[07/11 ♀はっか]
[07/11 ♀はっか]
[03/16 空竜]

最新トラックバック

プロフィール

HN:
空竜
性別:
女性

バーコード

ブログ内検索

アクセス解析

忍者アナライズ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

だいぶ形になってきました

昨日に引き続き、自作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

Trackbacks

TRACKBACK URL :

Comments

Comment Form