/* * Copyright (C) 2000 Manuel Novoa III * * Note: buf is a pointer to the END of the buffer passed. * Call like this: * char buf[SIZE], *p; * p = __ulltostr(buf + sizeof(buf) - 1, ...) * * For long longs of 64 bits, appropriate buffer sizes are: * base = 2 65 = 64 digits + 1 nul * base = 10 20 = 19 digits + 1 nul * base = 16 17 = 16 hex digits + 1 nul */ char *__ulltostr(char *buf, unsigned long long uval, int base, int uppercase) { int digit; if ((base < 2) || (base > 36)) { return 0; } *buf = '\0'; do { digit = uval % base; uval /= base; /* note: slightly slower but generates less code */ *--buf = '0' + digit; if (digit > 9) { *buf = (uppercase ? 'A' : 'a') + digit - 10; } } while (uval); return buf; }