CS 2731 Computer Organization II
|
The C program below does fairly general number base conversions. It doesn't handle bases bigger than 10, though that would be fairly easy to include.
/* writebase.c: convert between number bases in C
* This program does not handle bases > 10 nor
* does it handle negative numbers.
* Written by Neal R. Wagner, 7 Sept 1999
*/
#include <stdio.h>
#include <ctype.h>
void dumpout(int n, int base);
void writebase(int n, int base);
int readbase(int base);
void main(void) {
int n, base;
for( ; ; ) {
printf("input base (in base 10)>>>");
base = readbase(10);
if (base <= 0) break;
printf("Input number (in base ");
writebase(base, 10);
printf(")>>>");
n = readbase(base);
dumpout(n, 10);
dumpout(n, 8);
dumpout(n, 2);
printf("--------------------------\n");
}
}
void dumpout(int n, int base) {
printf("Base "); writebase(base, 10);
printf(": ");
writebase(n, base); putchar('\n');
}
void writebase(int n, int base) {
if (n != 0) {
writebase(n/base, base);
putchar((n%base) + '0');
}
}
int readbase(int base) {
char c;
int i = 0;
while (isdigit(c = getchar()))
i = base*i + (c - '0');
return i;
}
% cc -o writebase writebase.c % writebase input base (in base 10)>>>8 Input number (in base 8)>>>23456 Base 10: 10030 Base 8: 23456 Base 2: 10011100101110 -------------------------- input base (in base 10)>>>10 Input number (in base 10)>>>99999 Base 10: 99999 Base 8: 303237 Base 2: 11000011010011111 -------------------------- input base (in base 10)>>>0