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進数に変換、いわゆる、ごく一般的な変換方法を使用している。

Comments are closed.

Post Navigation