2017-04-05 1 views
0

Je crée une application qui fera la formule indiquée dans this video - The Everything FormulaConvertir chaîne binaire en base 10

Je vous suggère de regarder pour comprendre cela. J'essaie de reproduire la partie de la vidéo où il prend le graphique et obtient ce que serait «k» (The y Coordinate). J'ai pris chaque pixel de l'image, et l'ai mis dans une chaîne contenant la version binaire. La longueur du nombre binaire est si grande, je ne peux pas le stocker comme int ou long.

Maintenant, voici la partie que je ne peux pas résoudre.

Comment est-ce que je convertirais une chaîne contenant un nombre binaire en nombre de base 10 également en format de chaîne?

I Impossible d'utiliser en utilisant un type long ou int, ils ne sont pas assez grands. Toute conversion utilisant le type int ne fonctionnera pas non plus.

code Exemple:

public void GraphUpdate() 
    { 
     string binaryVersion = string.Empty; 

     for (int i = 0; i < 106; i++) 
     { 
      for (int m = 0; m < 17; m++) 
      { 
       PixelState p = Map[i, m]; // Map is a 2D array of PixelState, representing the grid/graph. 

       if (p == PixelState.Filled) 
       { 
        binaryVersion += "1"; 
       } 
       else 
       { 
        binaryVersion += "0"; 
       } 
      } 
     } 

     // Convert binaryVersion to base 10 without using int or long 
    } 

public enum PixelState 
{ 
    Zero, 
    Filled 
} 
+1

« Je vous suggère de regarder pour comprendre ce » --- :-D – zerkms

+0

« Comment pourrais-je convertir une chaîne contenant un nombre binaire en un nombre de base 10 également sous forme de chaîne? " mieux si vous nous donnez un exemple d'une chaîne que vous voulez convertir, au lieu de nous forcer à compiler et déboguer un exemple de code. – ElektroStudios

+0

À la base, un 'String' est juste un tableau de' Bytes' - pouvez-vous retravailler tout ce que vous faites dans un tableau? –

Répondre

1

Vous pouvez utiliser la classe BigInteger, qui fait partie de .NET 4.0. Voir MSDN BigInteger Constructor, qui prend comme octet d'entrée []. Cet octet [] est votre numéro binaire.
La chaîne de résultats peut être récupérée en appelant BigInteger.ToString()

+0

La conversion d'une chaîne binaire en octet [] peut être trouvée [ici] (http://stackoverflow.com/questions/3436398/convert-a-binary-string-representation-to-a-byte-array) – sulo

0

Essayez d'utiliser Int64. Cela fonctionne jusqu'à 9.223.372.036.854.775.807:

using System; 

namespace StackOverflow_LargeBinStrToDeciStr 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Int64 n = Int64.MaxValue; 
      Console.WriteLine($"n = {n}"); // 9223372036854775807 

      string binStr = Convert.ToString(n, 2); 
      Console.WriteLine($"n as binary string = {binStr}"); // 111111111111111111111111111111111111111111111111111111111111111 

      Int64 x = Convert.ToInt64(binStr, 2); 
      Console.WriteLine($"x = {x}"); // 9223372036854775807 

      Console.ReadKey(); 
     } 
    } 
}