使った事無いですけど
さて
某コンパイラのヘッダ見てたらこんなのがありました
int putc (auto char c, auto FILE *f);
auto?
なにそれ 美味しい物?
んで 調べてみると
どうやらB言語の名残でC言語では見ることはないらしい
(組み込みCコンパイラのstdio.hにふっつーに書いてあったけどな!)
んで B言語を調べてて 面白そうなコードを発見
Wikipediaに書いてあるんだけど与えた数値を与えた進数で表示するコード
んで C言語に移植したコード
Wikipediaのコードは最大10進数まで(※)なので
改造して36進数まで対応させました
36以上は数字もアルファベットも使い切るので
これ以上は実用性なくなるなぁ
256進数なんて誰も使わねぇよ...
んで 実行するとこうなる
左から 10進/16進/36進
もうちょっと機能を足したら
プログラムの動き方の説明とかで使えるかな?
ただこのコード
PICとかで使うのはやめたほうがいいと思います
PICのプログラムカウンタは通常の場合8レベルでスタックされるので
関数が8回くらい以上呼び出されるとマズイです
int型の場合は最大で10回くらい呼び出される可能性があるので
それよりも少ない数 たとえば120で3回としても
それ以前に複数回呼び出されていないとも限りません
なので PICでこのコードはマズイと思います
(ここらへんの動作は試していないのでテキトーに書いてるだけですけども)
まぁわざわざPICでこういうコードを使う必要もないと思いますが…
とりあえず 暇つぶしにB言語をC言語に移植(コラ)してみましたというお話
B言語ってぐぐってもC言語しか出てこないんだよなぁ
※)/* 以下 読み飛ばしても大丈夫な感じの記述 */
アスキーコードで数字は'0'(0x30)から続いてることを利用した処理
結構な頻度で使われる
ただし9からAは連続していないから
元のコードでは9までを使う10進しか対応していない
そこでifを使って10以上は+=7で7個の記号を飛ばしてAにしている
小文字を使いたい場合は+=39とすればいい
んで今回はZ以降の処理をしていないので37進数を使うと36に'['が使われる
そして42に'a'が来る
ASCIIでは71(~)まで対応していてそれ以上はおかしな表示になる
(半角カタカナでも表示されるかと思ったらされなかった)
0 件のコメント:
コメントを投稿