164 Aufrufe
Gefragt in Anwendungen(Java,C++...) von

Hallo zusammen,

ich habe eine kleine Funktion geschrieben, um Dezimalzahlen in Binärzahlen umzuwandeln.

Eigentlich funktioniert auch alles ganz gut.... Solange ich keine 0 eingebe.

Dann wird die Funktion gar nicht aufgerufen.

Woran kann das liegen?

Für Eure Mühe im voraus vielen Dank!


Function DezimalBin(DezZahl As LongLong, BinDigits As Integer) As String

Dim TempRest As LongLong
Dim BinString As String
Dim MaxForThisPos As LongLong


TempRest = DezZahl

If BinDigits <= 0 Then
    Answer = MsgBox("Value must be greate than zero!", vbOK + vbCritical, "VBA-Tutorial")
    Exit Function
End If

If BinDigits > 32 Then
    Answer = MsgBox("Only values up to 32 are supported!", vbOK + vbCritical, "VBA-Tutorial")
    Exit Function
End If

For i = (BinDigits - 1) To 0 Step -1
    
    MaxForThisPos = (2 ^ i)
    
    If TempRest >= MaxForThisPos Then
        BinString = BinString + "1"
        TempRest = TempRest - MaxForThisPos
    Else
        BinString = BinString + "0"
    End If
Next

If TempRest > 0 Then
    Answer = MsgBox("The value given cannot be shown with the given number of digits! Please provide a fitting value", vbOK + vbCritical, "VBA-Tutorial")
    Exit Function
End If

DezimalBin = BinString

End Function

2 Antworten

0 Punkte
Beantwortet von xlking Experte (1.5k Punkte)
ausgewählt von mickey
 
Beste Antwort
Also bei mir funktioniert deine Funktion tadellos. Wenn ich den Wert 0 übergebe wird mir auch eine 0 in der Länge der angegebenen Digits angezeigt. Wenn die Funktion gar nicht erst aufgerufen wird, muss das an deinem Code außerhalb der Funktion liegen.

Verwirrend: Du lässt Zahlen vom Typ LongLong (64 Bit) zu, rückst aber den String nur als Long (32 Bit) wieder raus.

Idee: Die BinDigits würde ich optional setzen. Du kannst vom Nutzer nicht erwarten, dass er die benötigte Länge kennt.

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo und vielen Dank!

Der Fehler lag tatsächlich bei mir im Aufruf ... sorry !

Ich limitiere auf 32 Bit, weil die mir ausreichen.

Die BinDigits benötige ich in meinem Fall, weil ich vorgeben möchte, wie viele Bits ich ausgegeben bekomme, d.h. ich möchte auch führende Nullen.

Vielen Dank für Deine Hilfe!
...