Converting a binary string to an int in C#

Back in my previous post, Converting an int to a binary string, we looked at how to write out the bits of an int without using the existing Convert.ToString method in the .NET Framework. Now, let’s look at the reverse – how to convert that binary string back into an int. The .NET Framework already has a built in method to do this (obviously), which is the Convert.ToInt32(string, int) method. This method takes the binary string and the base to convert from as parameters.

The easiest way that I have found to convert a binary number to decimal is to look at the bits of the binary number and raise 2 to the power of the index of the “on” bits and add those together. I define an “on” bit as a bit that is 1 as opposed to 0.

For example, the binary number 100 can be looked at as

22 + 0 + 0 = 4

Similary, 101 can be looked at as

22 + 0 + 20 = 5

Knowing this, we can then loop through the characters of the binary string, check if the bit is “on” and, if so, add

2 [index]

to resulting int. In the code example below, I first reverse the array to allow the index of our loop (power) match up with the index of the binary string (the power in which we want to raise 2 to).

public static int BitStringToInt(string bits)
{
    var reversedBits = bits.Reverse().ToArray();
    var num = 0;
    for (var power = 0; power < reversedBits.Count(); power++)
    {
        var currentBit = reversedBits[power];
        if (currentBit == '1')
        {
            var currentNum = (int) Math.Pow(2, power);
            num += currentNum;
        }
    }

    return num;
}