2進数の各桁を配列で記憶された巨大数字を、10進数に変換する関数。
配列の各要素の意味は以下の通り。
char配列の各要素が2進数の各桁に対応している。例えば、2進数 1011 に対応するchar配列 bin[] では、bin[0] = 1, bin[1] = 1, bin[2] = 0, bin[3] = 1。桁数は他の変数か定数で指示して下さい。
変換される10進数と配列の対応関係は上の2進数の場合と同様だ。例えば、10進数 321 に対応するちchar配列を dec とするならば、dec[0] = 1, dec[1] = 2, dec[2] = 3 となる。
この関数は、2進配列を10進配列に変換するもの。配列を長くすれば、理論上どんな大きさの2進数にも対応できる。なお、10進数の桁数は一般的に2進数の0.301倍以上と考えるといいだろう。つまり、
10進数の桁数=2進数の桁数 * log102=2進数の桁数 * 0.301
と計算できるから。
<関数名>
bin2dec ---- 2進数を10進数に変換する
<形式>
int bin2dec(char *dec, int bin_len, char *bin);
<引数>
dec 出力 変換される10進数配列。
bin_len 入力 2進数配列 char *bin の大きさ(桁数)
bin 入力 2進数配列
<関数値>
変換される10進数の桁数(10進数配列の有効要素数)
<注意事項>
関数の内部に、可変長配列の新機能を利用している。古いコンパイラだと通らないかもしれないが、いまのgcc(Gnu C/C++コンパイラ)では問題なく使える。その機能を使いたくなければ、十分大きなサイズにして下さい。
なお、入力パラメータの2進数配列 char *bin は本関数を使用後も内容が変更されない。
<用例>
<関数本体>
bin2dec.c
<説明>
2進数の各桁を2のべき乗として10進数に変換、いわゆる、ごく一般的な変換方法を使用している。