Zahlenumwandlung

  • Hi,

    Ich bräucht ne Funktion so ähnlich wie Hex(), also eine die Dezimalzahlen in ein anderes Zahlensystem umwandelt.
    Hät jemand ne Idee wie des gehen könnte?

    Vielleicht irgendwie mit _HextoString oder sowas.

  • Ne n andres System 64 oder sowas.
    Also sowas Wie 0123456789ABCDEFG...

    danke für die schnelle antwort

  • Also, hierhab ich das mal als Funtion umgesetzt.
    ( hab ich von http://www.vbarchiv.net/tipps/details.php?id=1590 erweitert)

    Spoiler anzeigen
    [autoit]

    MsgBox(0, '', _TranslateSystem("FF",16,10))

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _TranslateSystem
    ; Description:: Wandelt eine Zahl zwischen verschiedenen Zahlensystemen um.
    ; Parameter(s): $zahl - Die Zahl zum Umwandeln
    ; $OldSystem - [Optional] Das alte System (Default: 10)
    ; $NewSystem - [Optional] Das neue System (Default: 2)
    ; Requirement(s):
    ; Return Value(s): Success: Number in new format and @extended set to SystemBase
    ; Error: -1.#NAN or -1.#IND
    ; @error set to:
    ; 1 - Zahl nicht richtig formatiert
    ; 2 - neues System nicht im darstellbaren Bereich
    ; 3 - altes System nicht im darstellbaren Bereich
    ; 4 - Zahl enthält Zeichen, die nicht im System vorkommen
    ; Author(s): Prog@ndy; sd (VB-Code)
    ; Notes: Es können Zahlensysteme mit Basis von 2 bis 62 verwendet werden.
    ; Bei Systemen bis Basis 36 sind die Buchstaben nicht Case Sensitiv (a-z = A_Z = 10-35)
    ; Bei Systemen von 37 bis 62 sind die Buchstaben zur Darstellung des größeren Bereichs Case-sensitive
    ; (Die Buchstaben entsprechen dann: a-z = 10-35 und A-Z = 36-61)
    ; VB source used from http://www.vbarchiv.net/tipps/details.php?id=1590
    ;
    ;===============================================================================
    ;
    Func _TranslateSystem($zahl, $OldSystem=10, $NewSystem = 2)
    Local $out ;' Ausgabevariable
    Local $temp ;' Temporäre Variable
    $OldSystem = Int($OldSystem)
    $NewSystem = Int($NewSystem)
    Select
    Case Not StringRegExp($zahl,"\A[0-9a-zA-Z]+\Z")
    Return SetError(2,0,"-1.#NAN")
    Case $NewSystem < 2 Or $NewSystem > 62
    Return SetError(2,0,"-1.#IND")
    Case $OldSystem < 2 Or $OldSystem > 62
    Return SetError(3,0,"-1.#IND")
    EndSelect
    ;' Zeichen der Zahlensysteme ( bis Hexadezimalsystem )
    Local $chrsys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

    If $OldSystem <> 10 Then
    Local $CaseSense = ($OldSystem > 36)
    Local $ziffern = StringSplit($zahl,""), $nummer
    $zahl = 0
    For $i = 1 To $ziffern[0]
    $nummer = StringInStr($chrsys,$ziffern[$i],$CaseSense,1)
    If $nummer > 0 Then $zahl += ($nummer-1)*($OldSystem^($ziffern[0]-$i))
    If $nummer > $OldSystem Then Return SetError(4,0,"1.#NAN")
    Next
    EndIf

    ;' Solange bis Zahl = 0
    While $zahl <> 0
    ;' Stelle der Zahl ermitteln
    $temp = Mod($zahl, $NewSystem )
    ;' Zahl anhängen
    $out = StringMid($chrsys, $temp + 1, 1) & $out
    ;' Integerdivision
    $zahl = Int($zahl / $NewSystem)
    Wend
    SetExtended($NewSystem)
    Return $out
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (21. Februar 2009 um 12:24)

  • Vielen Dank für die schnellen Antworten :thumbup:

    Einmal editiert, zuletzt von xyzabc (29. Oktober 2008 um 18:36)