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