VB.NET - Dezimalzahl in Basis (bis 36) umrechnen

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

      VB.NET - Dezimalzahl in Basis (bis 36) umrechnen

      VB.NET - Dezimalzahl in Basis (bis 36) umrechnen
      Mit dieser Funktion können Dezimalzahlen in eine Basis (bis 36) umgerechnet werden

      VB.NET-Quellcode

      1. Function DEZtoBASIS(ByVal DEZ As Integer, ByVal BASIS As Byte) As String
      2. If BASIS < 0 OrElse BASIS< 2 OrElse BASIS> 36 Then Return "Fehler: Werte sind nicht korrekt"
      3. Dim ERG As String = "", ABC As String() = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9","a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
      4. While Not DEZ = 0
      5. ERG = ABC (DEZ Mod BASIS) + ERG
      6. DEZ \= BASIS
      7. End While
      8. Return ERG
      9. End Function


      Aufruf:

      VB.NET-Quellcode

      1. erg = DEZtoBASIS(150,16) ' Basis 16 (HEX) von 150


      Gruß, Chris
      Sobald DEZ negativ ist, knallt es.
      1. Vorschlag: negative Zahlen entsprechend berücksichtigen.
      2. Vorschlag: keinen Fehlertext zurückgeben, sondern eine Exception werfen und diese außen abfangen.
      Sieht folgendermaßen aus:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Function DEZtoBASIS(ByVal DEZ As Integer, ByVal BASIS As Byte) As String
      2. If BASIS < 2 OrElse BASIS > 36 Then
      3. Throw New ArgumentOutOfRangeException("Basis")
      4. End If
      5. Dim Vorzeichen As String = ""
      6. If (DEZ < 0) Then
      7. DEZ = -DEZ
      8. Vorzeichen = "-"
      9. End If
      10. Dim ABC As String() = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
      11. Dim ERG As String = ""
      12. While DEZ <> 0
      13. ERG = ABC(DEZ Mod BASIS) + ERG
      14. DEZ \= BASIS
      15. End While
      16. Return Vorzeichen & ERG
      17. End Function

      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      Wenn, dann sollte man auch eine Funktion angeben, mit der sich das Ganze umkehren lässt; So macht die Funktion noch recht wenig Sinn ;)

      Übrigens könnte man das Char-Array auch als String angeben: Kommt auf das selbe heraus und ist mMn komfortabler.
      In den meisten Fällen reicht auch
      Public Shared Function ToString(ByVal value As Long, ByVal toBase As Integer) As String
      Member von System.Convert
      Zusammenfassung:
      Konvertiert den Wert einer 64-Bit-Ganzzahl mit Vorzeichen in die entsprechende Zeichenfolgendarstellung bezüglich einer angegebenen Basis.

      Parameter:
      value: Die zu konvertierende 64-Bit-Ganzzahl mit Vorzeichen.
      toBase: Die Basis des Rückgabewerts, die 2, 8, 10 oder 16 sein muss.

      und
      Public Shared Function ToInt32(ByVal value As String, ByVal fromBase As Integer) As Integer
      Member von System.Convert
      Zusammenfassung:
      Konvertiert die Zeichenfolgendarstellung einer Zahl bezüglich einer angegebenen Basis in die entsprechende 32-Bit-Ganzzahl mit Vorzeichen.

      Parameter:
      value: Eine Zeichenfolge, die die zu konvertierende Zahl enthält.
      fromBase: Die Basis der Zahl in value, die 2, 8, 10 oder 16 sein muss.