VB - Fehler bei Binär zu Dezimal

  • Hi,
    ich verwende Visual Basic 2008 und habe mit meiner Binär zu Dezimal Funktion ein großes Problem.

    Sobald der Binäre Wert zulang wird (und der kann bei mir ziemlich lang werden) wandelt er nichtmehr korrekt in Dezimal um.
    Vielleicht kann mir jemand helfen.

    die Funktion:

    Code
    Private Function Bin2Dec(ByVal Bin As String) As Long
            ' Von Binaer nach Dezimal umrechnen
            Dim i As Long, lngLen As Long
            lngLen = Len(Bin)                   ' Länge der Binärzahl
            For i = lngLen To 1 Step -1         ' Für jede Stelle die Schleife durchgehen
                Bin2Dec = Bin2Dec + IIf(Mid$(Bin, i, 1) = "1", 2 ^ (lngLen - i), 0)
                ' umrechnen in Dezimal (siehe Erklärung oben)
            Next i
        End Function

    wird aufgerufen über:

    Code
    ergebnisanzeige.Text = Bin2Dec(Val(TextBox1.Text))

    sind die variablen falsch deklariert oder sowas? Hab leider von VB (noch) nicht soviel ahnung.
    Ich hoffe mir kann jemand helfen

  • Salut,

    wie in jeder anderen Programmiersprache hat auch VB2008 (eigentlich .NET, da VB2008 darauf aufbaut) bestimmte Wertebereiche für Datentypen. Du hast in deinem Beispiel Long verwendet. Wenn du in der Programmdokumentation nachschaust, siehst du, dass für Long 8 Bytes reserviert und die größtmögliche Zahl 9.223.372.036.854.775.807 ist. Das ist aber auch schon eine ganz schön große Zahl. Wenn du noch größere Wertebereiche benötigst, musst du tricksen.

    Die Zeile

    Zitat
    Code
    ergebnisanzeige.Text = Bin2Dec(Val(TextBox1.Text))

    ergibt nur mäßig Sinn, da du den String erst in eine Fließkommazahl konvertierst und dann für Bin2Dec doch wieder einen String erwartest. Daher besser

    Code
    ergebnisanzeige.Text = Bin2Dec(TextBox1.Text)

    Außerdem solltest du Überbleibsel aus VB6 (Val, Len), nicht mehr verwenden.


    Stefan