- 10 進整数を 2 で割って商と余剰を求める
- 商が 0 になるまで商に対して除算を繰り返す
- 手順1から手順2で求めた余剰を逆に並べる
実装
11進数以上の基数に変換する場合にはアルファベットが必要となる. そこで,配列に0からZまでの値を順に格納しておくことで,11以上の値をアルファベットに変換可能にする.
10 進整数を任意の基数(2進数から36進数まで)に変換するプログラムを以下に示す.
/* header files */
#include <stdio.h>
#include <stdlib.h>
/**
* 基数変換を行う
* @param[IN] x 変換する値
* @param[IN] radix 変換する基数
* @param[OUT] result 変換した値を逆順に格納
* @return 変換後の桁数
*/
int ConvertRadix(unsigned int x, int radix, char *result) {
char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int n = 0;
/* 変換する値が0ならそのまま0を格納する */
if ( x == 0 ) {
result[n] = 0;
n++;
} else {
while ( x > 0 ) {
result[n] = digits[x % radix]; /* 余剰を格納 */
x /= radix;
n++;
}
}
return n;
}
/* main */
int main(void) {
unsigned int x = 256; /* 変換する値 */
int radix = 2; /* 基数 */
char result[256] = {'\0'}; /* 変換後の値 */
int n; /* 変換後の値の桁数 */
int i;
/* 基数変換 */
n = ConvertRadix(x, radix, result);
for ( i = n - 1; i >= 0; i-- ) {
printf("%c", result[i]);
}
printf("\n");
return EXIT_SUCCESS;
}
ConvertRadixは余剰を求めた順に配列に格納しているため,呼び出し側 (main) で逆順に表示していることに注意.



















