Advertisement
chozoii

dec-to-base

Apr 14th, 2011
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. /*
  2. Date: 14 APR 2011
  3. */
  4.  
  5. #include <iostream>
  6. #include <string.h>
  7. using namespace std;
  8.  
  9. char* dectobase(int val,
  10.     int base, // 2 for binary, 16 for hex.
  11.     const char digits[] = "0123456789ABCDEF", //can be overridden, if you want base 27.
  12.     int i = 0 //for office use only
  13.     )
  14. {
  15.     int r = val % base; //remainder, this one will be converted and dropped onto our stack
  16.     int v = ((val - r) / base); //this will be recursed on
  17.     char* ret = '\0';
  18.     if ((base > strlen(digits)) || (base < 2)) // base 1 = you fail
  19.         return ret;
  20.  
  21.     if (v == 0) //base case, most-significant digit.
  22.     {
  23.         ret = new char [i]; //is this right?
  24.         i = 0; //reset, use i as index on way back out
  25.         ret[0] = digits[r];
  26.         return ret;
  27.     }
  28.     else
  29.     {
  30.         ret = dectobase(v, base, digits, ++i);
  31.         ret[i++] = digits[r];
  32.         return ret;
  33.     }
  34. }
  35.  
  36. int main()
  37. {
  38.     int val = 0;
  39.     cout << "val:";
  40.     cin >> val;
  41.     cout << "hex:" << dectobase(val, 16) << endl;
  42.     cout << "bin:" << dectobase(val, 2) << endl;
  43.     cout << "oct:" << dectobase(val, 8) << endl;
  44.     cout << "wtf:" << dectobase(val, 10, ")!@#$%^&*(") << endl;
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement