C# Binär zu Dezimal Umrechnung?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hier das sollte funktionieren:

string binZahl;
            const string binPattern = "^[1|0]{1,32}$";
            System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(binPattern);
            string input = "";


            int stellenwert = 1;
            int sum = 0;


            while (!regex.Match(input).Success)
            {
               Console.Write("Bitte geben Sie eine Binärzahl ein: ");
               input = Console.ReadLine();
            }


            binZahl = input;


            for (int i = binZahl.Length -1; i > -1; i--)
            {
                sum += (binZahl[i] - 48) * stellenwert;
                stellenwert *= 2;
            }


            Console.WriteLine("Die Binärezahl {0} ist äquivalent zu der Dezimalzahl {1}",binZahl,sum);
            Console.Read();

wieso gibst du den auch nicht die summe aus sondern den stellenwert ?

erklär mal was rauskommen soll und was rauskommt .

max20210212 
Fragesteller
 21.02.2021, 13:23

ja wenn ich auch die sum ausgebe kommt so ein riesige Zahl raus und natürlich auch falsch

0
TechPech1984  21.02.2021, 13:32
@max20210212

ja weil du binär[i] was ein zeichen ist in ein INT umwandelst.

laut ascii z.b. ist das Zeichen 0 der INT wert 48

ergo musst du dein STRING umwandeln in eine ZAHL

du könntest natürlich einfach

((int)binär[i]-48)

machen dann hättest du die 0

oder sowa wie

parseINT(binär[i])

z.b.

using System;
class HelloWorld {
 static void Main() {
         string binär = "";
           bool incorrectInput = false;
           int sum = 0;
           int stellenwert = 1;


           while (!incorrectInput)
           {
               Console.Write("Geben Sie eine Binärzahl ein:   ");
               binär = Console.ReadLine();
               incorrectInput = true;


               for (int i = binär.Length - 1; i >= 0; i--)
               {
                   if (binär[i] != '0' && binär[i] != '1')
                   {
                    Console.WriteLine(binär + "ist keine gültige Binärzahl!");
                       incorrectInput = false;
                       break;
                   }
                   else
                   {
                       sum = sum + (((int)binär[i]-48) * stellenwert);
                       stellenwert = stellenwert * 2;
                   }
               }
           }
           Console.WriteLine(binär + " ist eine gültige Binärzahl!");
           Console.WriteLine(sum);
 }
}
0
TechPech1984  21.02.2021, 13:37
@TechPech1984

ich weiss nicht ob es parseInt in deiner Sprache gibt . oder ob das da anders heisst. das musste selber suchen .

0
TechPech1984  21.02.2021, 13:45
@max20210212

???

verstehst du dein eigenen code nicht ?

was soll es bringen immer 48 abzuziehen von einer summe ?

sorry aber denk nochmal darüber nach wie binäre zahlen oder dezimal zahlen berechnet werden.

wenn man das so wie du machst kommt für die scheifen folgendes raus

001111

letzte stelle zuerst

string = '1' = integer = 49 , weil das so ist mit den zeichen , das A liegt bei 65 . die tabelle bestimmt welchen INT wert zeichen hat, nicht dein AUGE

also steht bei dir

49 * 1 = 49

es müsste aber

1 * 1 = 1 rauskommen

beim nächsten dann

49 * 2 = 98

es müsste aber

1 * 2 = 2

dann

49 * 4 = 196

haben willst du aber

1 * 4 = 4

und so weiter und sofort

was soll dir das also bringen am ende 48 abzuziehen ? erklär mal

0