Archive for Kwiecień, 2009

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. ;)