Normale Zahlen zu Base62 konvertieren

  • VB.NET
  • .NET (FX) 4.0

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    Normale Zahlen zu Base62 konvertieren

    Hey, habe vor ein paar Tagen mein Screenshotprogramm fertig gestellt,
    bisher benutzt es zum uploaden immer einen Zufallsstring. Jetzt möchte ich es so einstellen das es wie ein URL-shortener nach Base62 die strings konvertiert.

    Wie kann ich eine Zahl (Base10) in Base62 konvertieren?
    Ups, mein Fehler ! :whistling:

    Aber ...

    Visual Basic-Quellcode

    1. ' Aus bildungstechnischen gründen gelöscht ;)

    Quelle: http://www.piep.html
    Suche und ausprobieren < 10min. ;)

    Kann man sicher zu .Net übersetzen, oder eben so verwenden, wie es es.

    Meine Kritik bleibt aber bestehen, hier wurde mal wieder null Vorarbeit geleistet und sich voll darauf verlassen, daß so Trottel wie ich das übernehmen ! ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „timonator“ ()

    timonator schrieb:

    hier wurde mal wieder null Vorarbeit geleistet und sich voll darauf verlassen, daß so Trottel wie ich das übernehmen
    Warum beschwerst du dich jetzt?
    Der TE hat nirgends explizit nach Code geschrien.
    In Post #2 habe ich ihm die Richtung gezeigt.

    Anstatt seine Reaktion abzuwarten, postest du ihm hässlichen VB6-Code, der
    - nicht Strict-On-fähig ist
    - in .Net reservierte Methoden überlädt (Convert)
    - Nur bis Base36 funktioniert, also dem TE bei Base62 gar nichts bringt
    - Beim Dekodieren großer Zahlen abstürzt
    - Im Artikel selbst getaggt ist mit "Just made, not tested a lot, probably a few bugs." (und genau die hat er auch)

    Ich persönlich warte mit weiteren Infos bis der TE sich mal wieder meldet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Der TE hat nirgends explizit nach Code geschrien.
    Er hat gar nichts gemacht, null Eigeninitiative ! Sonnst hätte die Frage ja auch lauten können, "Ich habe hier nur vb6 code gefunden,der nicht richtig funktioniert, kann mir wer beim Übersetzen in .Net helfen ?" ;)

    petaod schrieb:

    Nur bis Base36 funktioniert, also dem TE bei Base62 gar nichts bringt
    Ich habe es auch getestet, der code "funktioniert" sogar bis Base64.

    petaod schrieb:

    Beim Dekodieren großer Zahlen abstürzt
    Ich weiß, der code sollte ja auch nur als Ansatz dienen.

    Und niemand wird sterben, wenn er mal kritisiert wird, warum zur Hölle habe so viele Leute ein Problem damit ? :cursing:

    timonator schrieb:

    Ich habe es auch getestet, der code "funktioniert" sogar bis Base64.
    ?(
    Wenn du mit "funktionieren" meinst, dass er irgendwas ausgibt.
    Der zu verwendende Zeichensatz ist schon bei Base36 falsch und bei Base62 schon mal gar nicht definiert.
    Da wird zwar irgendwas enkodiert, was aber beim rückwärtigen Dekodieren was völlig anderes als das ausgibt oder gleich abstürzt.
    So ein Algorithmus muss symmetrisch sein, sonst kannst du ihn knicken.

    Und Base64 ist ein völlig anderes Verfahren, das mit Base36 / Base62 nichts zu tun hat.

    Falls du Grundlagen benötigst:
    Base62 ist ein Stellenwertsystem zur Basis 62, welches zur Kodierung großer Zahlen mittels ASCII-Zeichen dient. Dabei werden die Ziffern 0–9 (Wert 0–9), Großbuchstaben A–Z (Wert 10–35) und Kleinbuchstaben a–z (Wert 36–61) verwendet (Wikipedia).
    Base36 ist dasselbe Verfahren, aber ohne Kleinbuchstaben.
    Beide Varianten können nur Zahlen enkodieren.

    Base64 ist ein Verfahren, um beliebige Zeichenketten in noch längere, aber dafür im Standardzeichensatz lesbare Strings zu verwandeln.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    im Standardzeichensatz lesbare Strings
    Im Prinzip zur Übertragung mit einem Medium mit eingeschränkter Zeichenzahl, z.B. Fernschreiber.
    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!
    Zum Beispiel:

    Quellcode

    1. Function DezToBase62(ByVal DezZahl As Long) As String
    2. Dim z As Long
    3. Dim nZ As String = ""
    4. Do
    5. z = DezZahl Mod 62
    6. If z < 10 Then
    7. nZ = z.ToString & nZ
    8. ElseIf z < 36 Then
    9. nZ = Chr(55 + z) & nZ
    10. Else
    11. nZ = Chr(61 + z) & nZ
    12. End If
    13. DezZahl -= z
    14. If DezZahl = 0 Then
    15. Exit Do
    16. Else
    17. DezZahl = DezZahl / 62
    18. End If
    19. Loop
    20. DezToBase62 = nZ
    21. End Function