Konwersja liczb binarny => dziesiętny i nauka po fakcie. ;)
W swoim projekcie z algorytmów genetycznych potrzebowałem przekonwertować liczbę zapisaną w systemie binarnym na system dziesiętny.
Liczba ta była przechowywana w tablicy typu int.
Utworzyłem taką oto funkcję konwertującą liczby z systemu binarnego na dziesiętny „na piechotę” ;):
public int ConvertFromBinaryToInt(int[] binaryNum)
{
//Wykladnik potegi
int power = 0;
//Aktualna wartosci
int value = 0;
//Czytam zawartosc tablicy od konca
for (int i = binaryNum.Length - 1; i >= 0; i--)
{
//Jesli napotkam w tablicy 1
if (binaryNum[i] == 1)
{
//value + 2^power
value += (int)Math.Pow(2, power);
}
power++;
}
return value;
}
Zorientowałem się jednak po napisaniu powyższej metody że można to osiągnąć w trywialny sposób:
public int ConvertFromBinaryToInt(int[] binaryNum)
{
object[] objArray = new object[binaryNum.Length];
binaryNum.CopyTo(objArray, 0);
//lacze zawartosc tablicy
//object[] w jeden string
string str = String.Concat(objArray);
//Konwersja na system
//dziesietny z dwojkowego
return Convert.ToInt32(str, 2);
}
Chyba każdemu zdarzyło się napisać coś, a dopiero później dojść do wniosku, że można było to osiągnąć w dużo prostszy sposób. ;)