/** * C++ numeric base conversions * * - sangf */ #include #include #include #if INT_MAX == 2147483647 && UINT_MAX == 4294967295 typedef int int_32t; typedef unsigned int uint_32t; #elif LONG_MAX == 2147483647 && ULONG_MAX == 4294967295 typedef int int_32t; typedef unsigned int uint_32t; #else # error 32-bit integers required for this code #endif static const char *base_lookup = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"; std::string dec_to_base(int_32t number, int_32t base); std::string dec_to_base(int_32t number, int_32t base) { if (base = 37) throw; else { bool negative = false; if (number < 0) { number -= (number * 2); // negation negative = true; } std::string hex_int_32t; int result = number, remain = 0; do { number = number / base; // division result remain = result % base; // remainder result result = number; hex_int_32t.insert(0, 1, base_lookup[remain]); } while (result != 0); if (negative) hex_int_32t.insert(0, 1, \'-\'); return hex_int_32t; } }