Binär zu Dezimal Umwandler

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Gaga.

    Binär zu Dezimal Umwandler

    Hallo zusammen.

    Habe hier einen Umwandler geschrieben, der von Dezimal zu Binär umwandelt.

    VB.NET-Quellcode

    1. Public Class frmFenster
    2. Private Sub btnUmwandlung_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUmwandlung.Click
    3. Dim Rest As Integer
    4. Dim Zahl As Single
    5. Dim x As Integer
    6. Dim a As Integer
    7. Dim Ergebnis(15) As Char
    8. x = 0
    9. a = 0
    10. Zahl = Val(txtEingabe.Text)
    11. For a = 0 To 15
    12. Ergebnis(a) = "0"
    13. Next a
    14. While Zahl > 0
    15. Rest = Zahl Mod 2
    16. Ergebnis(x) = Convert.ToString(Rest)
    17. x = x + 1
    18. Zahl = Int(Zahl / 2)
    19. End While
    20. For a = 15 To 0 Step -1
    21. lblAusgabe.Text = lblAusgabe.Text & Ergebnis(a)
    22. Next
    23. End Sub
    24. Private Sub frmFenster_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    25. End Sub
    26. End Class


    Jetzt möchte ich das ganze gerne umdrehen. Das heißt eine Binäre Zahl eingeben und er soll mir die Dezimale errechnen. Wie kann ich das am besten realisieren?

    Mit freundlichen Grüßen

    hkc_rainer
    Hi
    Sollte so funktionieren:

    VB.NET-Quellcode

    1. Private Function ToDecimal(ByVal str As String) As Long
    2. Dim length As Long
    3. Dim lngDec As Long
    4. length = str.Length
    5. For i As Integer = length To 1 Step -1
    6. If str(i - 1) = "1" Then
    7. lngDec = lngDec + (2 ^ (length - i))
    8. Else
    9. lngDec = lngDec + 0
    10. End If
    11. Next
    12. Return lngDec
    13. End Function


    Gruß
    ~blaze~
    Vielen Dank erst einmal.

    Geht das auch so ungefähr wie bei dem anderen Umwandler?

    IngDec, Str.Length und noch mehrere Sachen kenne ich noch nicht.

    Ich kann nur soweit interpretieren:

    Private Funktion die ToDecimal heißt. Dann zwei variablen deklariert.
    und dann hast du ne schleife gemacht die runterzählt.
    und dann kommt z.b das ingDec...
    Return glaub ich gibt das ganze nur aus, bin ich mir aber auch nicht sicher.

    Gruß
    hkc_rainer
    Das ganze sieht nun so aus:

    VB.NET-Quellcode

    1. Public Class frm_Fenster
    2. Dim length As Long
    3. Dim lngDec As Long
    4. Private Function ToDecimal(ByVal Str As String) As Long
    5. length = Str.Length
    6. For i As Integer = length To 1 Step -1
    7. If Str(i - 1) = "1" Then
    8. lngDec = lngDec + (2 ^ (length - i))
    9. Else
    10. lngDec = lngDec + 0
    11. End If
    12. Next
    13. Return lngDec
    14. End Function
    15. Private Sub frm_Fenster_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    16. End Sub
    17. Private Sub btn_Knopf_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Knopf.Click
    18. End Sub
    19. End Class


    Aber irgendwie funktioniert das nicht so wie ich will^^
    Eigentlich wollte ich ne textbox in der ich ne binärzahl eingebe, und die dann im label als dezimal erscheint, nachdem ich auf den button gedrückt habe...
    Magst du nochmal helfen?

    Gruß
    hkc_rainer
    Melde mich nun nochmal zu Wort.
    Das Programm sieht nun folgendermaßen aus:

    VB.NET-Quellcode

    1. Public Class frm_fenster
    2. Dim length As Long
    3. Dim lngDec As Long
    4. Private Function ToDecimal(ByVal Str As String) As Long
    5. length = Str.Length
    6. For i As Integer = length To 1 Step -1
    7. If Str(i - 1) = "1" Then
    8. lngDec = lngDec + (2 ^ (length - i))
    9. Else
    10. lngDec = lngDec + 0
    11. End If
    12. Next
    13. Return lngDec
    14. End Function
    15. Private Sub frm_fenster_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    16. End Sub
    17. Private Sub btn_Knopf_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Knopf.Click
    18. lbl_Label.Text = ToDecimal(txt_Textbox.Text)
    19. End Sub
    20. End Class


    Die Umwandlung funktioniert, aber leider nicht perfekt.
    Trage ich 1111 in die TextBox ein, so erscheint im Label die passende Dezimalzahl, in diesem Fall 15.
    Wenn ich nochmal den Button drücke, schreibt er aber 30, obwohl die 1111 geblieben ist. Genau so bei einer anderen Zahl, er addiert, statt den alten Wert zu löschen.
    Habe auch schon mal probiert das mit einem zweiten Button zu lösen, indem ich mit dem Button das Label auf 0 setze. Hat aber leider nicht geklappt.
    Kann wer helfen?

    Gruß
    hkc_rainer

    PS: Kann jmd. gute Tutorials oder sowas in der Art empfehlen? Habe das Buch vb.net in 21 Tagen und Visual Basic 2008 einfach lernen.
    Du solltest dich zuerst mal mit den Grundlagen beschäftigen, Variablendeklaration, Datentypen, Gültigkeitsbereiche etc.
    ~blaze~ hatte in seinem Beispiel die Variablen length und lngDec innerhalb der Fkt definiert, du hast sie außerhalb definiert. Deshalb wird bei deiner Funktion dazuaddiert, weil ja der alte Wert beim zweiten Aufruf noch vorhanden ist, bei ~blaze~'s Version jedoch nicht.

    Visual Basic 2005 Das umfassende Handbuch
    Einstieg in Visual Basic 2008