15,113,153 members
Articles / Programming Languages / C#
Article
Posted 27 May 2005

230K views
34 bookmarked

# Conversion of Decimal to any Base (Binary, Octal or Hexa) and vice-versa (C#)

Rate me:
27 May 2005CPOL2 min read
Generic functions written in C# to convert a binary,octal or a hexa-decimal to a decimal number and vice-versa.

## Introduction

C# conversion functions are very powerful. The `Convert` class has many methods that perform typical conversion of a `string` to integer, and other data types. One of the functions `ToInt64()` not only converts a given value to a 64-bit integer but also returns the number to the specified base.

C#
`Convert.ToInt64(value,16);`

The above function converts a decimal number to hexadecimal number. This is most useful in situations where you write programs for arithmetic calculations. I thought of writing my own function that does this kind of conversion. I created two functions, `DecimalToBase` which converts any decimal number to a binary, octal or hexadecimal number and `BaseToDecimal` which converts any binary, octal or hexadecimal number to the corresponding decimal number.

The most interesting part is that both the functions are generic in nature. In the `DecimalToBase` function, I had to write the algorithm that can perform the conversion of a decimal to binary, octal or hexadecimal. I had to write the code for all of these conversions within a single function, still keeping my code reduced to handle all sorts of values. C#’s type-safe nature prevents us from doing some easier character-int conversions and we just can’t surpass them, as it would produce adverse results. Same is the case with the `BaseToDecimal` function.

### A sample application to test the conversion functions

• Create a sample Windows application in Visual Studio. NET.
• In the form:
1. Add three label controls named `label1`, `label2`, and `label3`.
2. Add three text box controls named `textBox1`, `textBox2`, and `textBox3`.
3. Place a button control named `button1` and set its `Text` property to “To Base”.
4. Place another button control named `button2` and set its `Text` property to “To Base”.
• Write the following declarations as data members of the `form` class:
C#
```const int base10 = 10;
char[] cHexa = new char[]{'A','B','C','D','E','F'};
int[] iHexaNumeric = new int[] {10,11,12,13,14,15};
int[] iHexaIndices = new int[] {0,1,2,3,4,5};
const int asciiDiff = 48;```
• Include the functions as member methods in the `form` class module.

This function takes two arguments; the integer value to be converted and the base value (2, 8, or 16) to which the number is converted to:

C#
```string DecimalToBase(int iDec, int numbase)
{
string strBin = "";
int[] result = new int[32];
int MaxBit = 32;
for(; iDec > 0; iDec/=numbase)
{
int rem = iDec % numbase;
result[--MaxBit] = rem;
}
for (int i=0;i<result.Length;i++)
if ((int) result.GetValue(i) >= base10)
strBin += cHexa[(int)result.GetValue(i)%base10];
else
strBin += result.GetValue(i);
strBin = strBin.TrimStart(new char[] {'0'});
return strBin;
}```

This function takes two arguments; a string value representing the binary, octal, or hexadecimal value and the corresponding integer base value respective to the first argument. For instance, if you pass the first argument value "1101", then the second argument should take the value "2".

C#
```int BaseToDecimal(string sBase, int numbase)
{
int dec = 0;
int b;
int iProduct=1;
string sHexa = "";
if (numbase > base10)
for (int i=0;i<cHexa.Length;i++)
sHexa += cHexa.GetValue(i).ToString();
for(int i=sBase.Length-1; i>=0; i--,iProduct *= numbase)
{
string sValue = sBase[i].ToString();
if (sValue.IndexOfAny(cHexa) >=0)
b=iHexaNumeric[sHexa.IndexOf(sBase[i])];
else
b= (int) sBase[i] - asciiDiff;
dec += (b * iProduct);
}
return dec;
}```
• Write the code in the `click` event of the buttons as follows:

On clicking the first button, you can convert a decimal number to any base you select in the `ComboBox`.

C#
```private void button1_Click(object sender, System.EventArgs e)
{
textBox3.Text = DecimalToBase(Int32.Parse(textBox1.Text),
Int32.Parse(comboBox1.Text));
}```

On clicking the second button, you can convert the base number you have selected in the `ComboBox` (binary, octal, or hexadecimal) to a decimal number.

C#
```private void button2_Click(object sender, System.EventArgs e)
{
textBox3.Text = BaseToDecimal(textBox1.Text,
Int32.Parse(comboBox1.Text)).ToString();
}```
• Save the project. Build the solution.
• Output is as shown below:

## About the Author

 Founder BB Systems CIT-GPNP India
No Biography provided

## Comments and Discussions

 First Prev Next
 My vote of 5 Gun Gun Febrianza25-Sep-13 4:47 Gun Gun Febrianza 25-Sep-13 4:47
 Here is a more general 30-minute semi-glitchy job that will convert between non-integer bases. Kerdekz28-Apr-12 17:18 Kerdekz 28-Apr-12 17:18
 Can a Fractional number be converted to Binary ? Ganesamoorthy.S19-Jan-12 0:26 Ganesamoorthy.S 19-Jan-12 0:26
 Re: Can a Fractional number be converted to Binary ? Kerdekz28-Apr-12 17:29 Kerdekz 28-Apr-12 17:29
 works great, thanks! spyhunter9994-Sep-11 3:09 spyhunter999 4-Sep-11 3:09
 My vote of 4 shelby6716-Jun-11 20:29 shelby67 16-Jun-11 20:29
 My New Version - Using bitwise-AND operator [modified] dciobanu2007@gmail.com23-Apr-09 11:53 dciobanu2007@gmail.com 23-Apr-09 11:53
 Big numbers problem kavy77711-Feb-09 23:42 kavy777 11-Feb-09 23:42
 My Versions kender_216-Jul-07 9:01 kender_2 16-Jul-07 9:01
 Re: My Versions Shabbazz7-Aug-07 2:05 Shabbazz 7-Aug-07 2:05
 Re: My Versions blackjack215017-Oct-07 21:49 blackjack2150 17-Oct-07 21:49
 Re: My Versions LightningSt0rm9-Nov-07 12:58 LightningSt0rm 9-Nov-07 12:58
 Re: My Versions LightningSt0rm9-Nov-07 13:24 LightningSt0rm 9-Nov-07 13:24
 Re: My Versions Elad Moshe16-Aug-09 23:11 Elad Moshe 16-Aug-09 23:11
 Thanks :-D jackmandile22-Nov-06 9:52 jackmandile 22-Nov-06 9:52
 Wonderful Fahad Azeem24-Nov-05 22:28 Fahad Azeem 24-Nov-05 22:28
 Improvement Nigel Savidge15-Sep-05 5:52 Nigel Savidge 15-Sep-05 5:52
 Re: Improvement [modified] lemueladane12-May-08 22:56 lemueladane 12-May-08 22:56
 Re: Improvement Nigel Savidge14-May-08 6:03 Nigel Savidge 14-May-08 6:03
 Re: Improvement [modified] lemueladane14-May-08 5:05 lemueladane 14-May-08 5:05
 Last Visit: 31-Dec-99 19:00     Last Update: 27-Nov-21 19:25 Refresh 1

General    News    Suggestion    Question    Bug    Answer    Joke    Praise    Rant    Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.