10進数の各桁を配列で記憶された巨大数字を、2進数に変換する関数。

混乱を避けるため、まず配列の記録方法を書いておく。

char配列 dec[] の各要素が10進数の各桁に対応している。最初の要素 dec[0] が右端の桁(下桁)に対応。例えば、10進数 321 に対応する配列は dec[0] = 1, dec[1] = 2, dec[2] = 3 となる。

10進数の桁数(つまり、配列の大きさ)は他の変数か定数で示す必要がある。配列の中に桁数を示す情報はない。

2進数についての記憶方法も同じ。2進数 1011 に対応するchar配列 bin[] では、bin[0] = 1, bin[1] = 1, bin[2] = 0, bin[3] = 1。10進数と同様、桁数は他の変数か定数を利用してください。

この関数は、10進配列を2進配列に変換するもの。配列を長くすれば、理論上どんな大きさの10進数にも対応できる。なお、2進数の桁数は一般的に10進数の3.322倍以上と考えるといいだろう。つまり、

  2進数の桁数=10進数の桁数 / log102=10進数の桁数 * 3.322

と計算できるから。

<関数名>
  dec2bin —- 10進数を2進数に変換する

<形式>
  int dec2bin(char *bin, int dec_len, char *dec);

<引数>
  bin    出力 変換される2進数配列。
  dec_len 入力 10進数配列 char *dec の大きさ(桁数)
  dec   入力 10進数配列

<関数値>
  変換される2進数の桁数(2進数配列の有効要素数)

<注意事項>
  関数の内部に、可変長配列の新機能を利用している。古いコンパイラだと通らないかもしれないが、いまのgcc(Gnu C/C++コンパイラ)では問題なく使える。その機能を使いたくなければ、十分大きなサイズにして下さい。
  なお、入力パラメータの10進数配列 char *dec は本関数を使用後も内容が変更されない。

用例

<関数本体>
  dec2bin.c

<説明>
  10進数を2で割っていき、余りを2進数の各桁とする。いわゆる、ごく一般的な方法で変換している。

Comments are closed.

Post Navigation