Advertisement
wingman007

ConvertNumberSystems

Sep 18th, 2016
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.80 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Convert2Base
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             int n = 255;
  14.             // n = 0xaab;
  15.  
  16.             for (byte b = 2; b < 35; b++)
  17.             {
  18.                 Console.WriteLine();
  19.                 Console.WriteLine("{0:D}", n);
  20.                 Console.WriteLine(Convert.ToString(n, 10));
  21.                 Console.WriteLine(Convert.ToString(n, 2));
  22.                 Console.WriteLine(Convert.ToString(n, 8));
  23.                 Console.WriteLine("{0:X}", n);
  24.                 Console.WriteLine(Convert.ToString(n, 16));
  25.  
  26.                 Console.WriteLine("Base {0}:", b);
  27.                 Console.WriteLine(Convert2Base(n, b));
  28.                 Console.WriteLine(Convert2Decimal(Convert2Base(n, b), b));
  29.             }
  30.         }
  31.  
  32.         static string Convert2Base(int n, byte b)
  33.         {
  34.             if (b > 36) throw new Exception("Can not convert to base bigger than 36");
  35.             string result = "";
  36.             string[] s = new string[128];
  37.             int reminder = 0;
  38.             int i = 0;
  39.             while (n >= b)
  40.             {
  41.                 reminder = n % b;
  42.                 if (reminder > 9)
  43.                 {
  44.                     s[i] = ConvertNuber2Char(reminder).ToString();
  45.                 }
  46.                 else
  47.                 {
  48.                     s[i] = Convert.ToString(reminder);
  49.                 }
  50.                
  51.                 n /= b;
  52.                 i++;
  53.             }
  54.             if (n > 9)
  55.             {
  56.                 s[i] = ConvertNuber2Char(n).ToString();
  57.             }
  58.             else
  59.             {
  60.                 s[i] = Convert.ToString(n);
  61.             }
  62.  
  63.             for (; i >= 0; i--)
  64.             {
  65.                 result += s[i];
  66.             }
  67.             return result;
  68.         }
  69.  
  70.         static char ConvertNuber2Char(int n)
  71.         {
  72.             // ToDo use UTF-8 code to convert not a switch
  73.             if (n > 35) throw new Exception("Can not convert number bigger than 35 to characters from some alphabet");
  74.             char c = '#';
  75.             switch (n)
  76.             {
  77.                 case 10:
  78.                     c = 'A';
  79.                     break;
  80.                 case 11:
  81.                     c = 'B';
  82.                     break;
  83.                 case 12:
  84.                     c = 'C';
  85.                     break;
  86.                 case 13:
  87.                     c = 'D';
  88.                     break;
  89.                 case 14:
  90.                     c = 'E';
  91.                     break;
  92.                 case 15:
  93.                     c = 'F';
  94.                     break;
  95.  
  96.  
  97.                 case 16:
  98.                     c = 'G';
  99.                     break;
  100.                 case 17:
  101.                     c = 'H';
  102.                     break;
  103.                 case 18:
  104.                     c = 'I';
  105.                     break;
  106.                 case 19:
  107.                     c = 'J';
  108.                     break;
  109.                 case 20:
  110.                     c = 'K';
  111.                     break;
  112.                 case 21:
  113.                     c = 'L';
  114.                     break;
  115.                 case 22:
  116.                     c = 'M';
  117.                     break;
  118.                 case 23:
  119.                     c = 'N';
  120.                     break;
  121.                 case 24:
  122.                     c = 'O';
  123.                     break;
  124.                 case 25:
  125.                     c = 'P';
  126.                     break;
  127.                 case 26:
  128.                     c = 'Q';
  129.                     break;
  130.                 case 27:
  131.                     c = 'R';
  132.                     break;
  133.                 case 28:
  134.                     c = 'S';
  135.                     break;
  136.                 case 29:
  137.                     c = 'T';
  138.                     break;
  139.                 case 30:
  140.                     c = 'U';
  141.                     break;
  142.                 case 31:
  143.                     c = 'V';
  144.                     break;
  145.                 case 32:
  146.                     c = 'W';
  147.                     break;
  148.                 case 33:
  149.                     c = 'X';
  150.                     break;
  151.                 case 34:
  152.                     c = 'Y';
  153.                     break;
  154.                 case 35:
  155.                     c = 'Z';
  156.                     break;
  157.  
  158.                 case 36:
  159.                     c = 'Б'; // :)
  160.                     break;
  161.             }
  162.             return c;
  163.         }
  164.  
  165.         static int Convert2Decimal(string n, byte b)
  166.         {
  167.             int result = 0;
  168.             int number = 0;
  169.             for (int i = 0; i < n.Length; i++)
  170.             {
  171.                 try
  172.                 {
  173.                     number = int.Parse(n[i].ToString());
  174.                 }
  175.                 catch
  176.                 {
  177.                     number = ConvertChar2Number(n[i]);
  178.                 }
  179.                 result += number  * (int)Math.Pow(b, n.Length - 1 - i);
  180.             }
  181.             return result;
  182.         }
  183.  
  184.         static int ConvertChar2Number(char c)
  185.         {
  186.             // ToDo use UTF-8 code to convert not a switch
  187.             // if (n > 35) throw new Exception("Can not convert number bigger than 35 to characters from some alphabet");
  188.             int n = 0;
  189.             c = c.ToString().ToUpper()[0]; // convert the char to uppercase
  190.             switch (c)
  191.             {
  192.                 case 'A':
  193.                     n = 10;
  194.                     break;
  195.                 case 'B':
  196.                     n = 11;
  197.                     break;
  198.                 case 'C':
  199.                     n = 12;
  200.                     break;
  201.                 case 'D':
  202.                     n = 13;
  203.                     break;
  204.                 case 'E':
  205.                     n = 14;
  206.                     break;
  207.                 case 'F':
  208.                     n = 15;
  209.                     break;
  210.  
  211.  
  212.                 case 'G':
  213.                     n = 16;
  214.                     break;
  215.                 case 'H':
  216.                     n = 17;
  217.                     break;
  218.                 case 'I':
  219.                     n = 18;
  220.                     break;
  221.                 case 'J':
  222.                     n = 19;
  223.                     break;
  224.                 case 'K':
  225.                     n = 20;
  226.                     break;
  227.                 case 'L':
  228.                     n = 21;
  229.                     break;
  230.                 case 'M':
  231.                     n = 22;
  232.                     break;
  233.                 case 'N':
  234.                     n = 23;
  235.                     break;
  236.                 case 'O':
  237.                     n = 24;
  238.                     break;
  239.                 case 'P':
  240.                     n = 25;
  241.                     break;
  242.                 case 'Q':
  243.                     n = 26;
  244.                     break;
  245.                 case 'R':
  246.                     n = 27;
  247.                     break;
  248.                 case 'S':
  249.                     n = 28;
  250.                     break;
  251.                 case 'T':
  252.                     n = 29;
  253.                     break;
  254.                 case 'U':
  255.                     n = 30;
  256.                     break;
  257.                 case 'V':
  258.                     n = 31;
  259.                     break;
  260.                 case 'W':
  261.                     n = 32;
  262.                     break;
  263.                 case 'X':
  264.                     n = 33;
  265.                     break;
  266.                 case 'Y':
  267.                     n = 34;
  268.                     break;
  269.                 case 'Z':
  270.                     n = 35;
  271.                     break;
  272.  
  273.                 case 'Б':
  274.                     n = 36; // :)
  275.                     break;
  276.                 default:
  277.                     throw new Exception("The char can not be converted to a number");
  278.             }
  279.             return n;
  280.         }
  281.     }
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement