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進数の各桁とする。いわゆる、ごく一般的な方法で変換している。