使用栈来实现进制转换,栈的实现可以参考前面的.
// 数字转换为字符
int number_to_char(char n)
{
if (n < 10) // [0-9] -> ['0'-'9']
{
n += '0';
}
else if (n < 17)// [10-16] -> ['A'-'F']
{
n += 55;
}
return n;
}
// 进制转换
// 先把最低位依次入站,则栈顶就是最高位
// 然后所有元素都出栈就可以了
int conversion(int n, int base, char *buffer, size_t size)
{
assert(buffer);
assert((2==base) || (8==base) || (16==base));
stack_t stack;
stack_init(stack);
do
{
// 把最低位转换为字符,放到栈里面
stack_push(stack, number_to_char(n % base));
n /= base; // 去掉最低位
} while (n != 0);
n = 0;
--size;
while (n < size)
{
element_t e = 0;
if (!stack_pop(stack, e))
{
break;
}
buffer[n] = (char)e;
++n;
}
buffer[n] = '\0';
stack_destory(stack);
}
void test_conversion()
{
char buffer_02[32];
char buffer_08[32];
char buffer_16[32];
for (int i=0; i<32; ++i)
{
conversion(i, 2, buffer_02, sizeof(buffer_02));
conversion(i, 8, buffer_08, sizeof(buffer_08));
conversion(i, 16, buffer_16, sizeof(buffer_16));
printf("%2d %10s%10s%10s\n", i, buffer_02, buffer_08, buffer_16);
}
}