/* Print integers in a given base 2-16 (default 10) */ #include #include void reverse(char x[], int len) { int i, j = len - 1; for (i = 0; i < j; i++) { int t = x[i]; x[i] = x[j]; x[j--] = t; } } int itoa(int n, int b, char str[]) { int i = 0; do str[i++] = "0123456789ABCDEF"[n%b]; while ((n /= b) > 0); reverse(str, i); str[i] = '\0'; return i; } int main(int argc, char *argv[]) { int i; for (i = 1; i < argc - 1; i += 2) { int n, base, len; char buf[50]; sscanf(argv[i], "%d", &n); sscanf(argv[i+1], "%d", &base); if (base < 2 || base > 16) { printf("%s: %d is a invalid base; using 10\n", argv[0], base); base = 10; } len = itoa(n, base, buf); printf("%s (%d)\n", buf, len); } return 0; }