Base 62 [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Base 62 [Résolu]

Message par Kwai chang caine »

J'ai modifié le code de ALGONZALES qui donnait une convertion en base 2,8,16,36.
Evidemment Kcc ça lui suffit pas, y voulait 62 :?

Alors, j'ai tenté de créé cette base.
ça marche mais pas avec les gros chiffres 8O
Je comprend pas pourquoi ? (Normal)

Code : Tout sélectionner

; http://www.purebasic.fr/english/viewtopic.php?t=9617&highlight=convert+base
; Code de AlGonzales modifié en base 62 par KCC

#BASEMIN =  2 
#BINBASE =  2 
#OCTBASE =  8 
#HEXBASE = 16 
#TRENTESIXBASE = 36 
#SOIXANTEDEUXBASE = 62

Procedure.s Int2Base(Value.l, Base.l) 

 Protected Result.s 

 If (Base >= #BASEMIN) And (Base <= #SOIXANTEDEUXBASE)
 
  Protected  i.l 

  Repeat 
   i = (Value % Base) + 1 
   Value = (Value / Base) 
   Result = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", i, 1) + Result 
  Until Value = 0 

 EndIf 

 ProcedureReturn Result 

EndProcedure 

Procedure.l Base2Int(Value.s, Base.l) 
 
 Protected Result.l 
 Result = 0 

 If (Base >= #BASEMIN) And (Base <= #SOIXANTEDEUXBASE) 

  Protected i.l, c.l 

  For i = 1 To Len(Value) 

   c = FindString("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", UCase(Mid(Value, i, 1)), 1) 
   ; Return -1 If character is not supported by base 

   If c > Base 
    Result -1 
    Break 
   EndIf 

   Result = (Result * Base) + (c - 1) 

  Next i 

 EndIf 

 ProcedureReturn Result 

EndProcedure


i = 357427341
Bin.s = Int2Base(i, #BINBASE)
Oct.s = Int2Base(i, #OCTBASE)
Dec.s = Str(i)
Hex.s = Int2Base(i, #HEXBASE)
B62.s = Int2Base(i, #SOIXANTEDEUXBASE)

Debug "Bin or Base  2 = " + Bin 
Debug "Oct or Base  8 = " + Oct
Debug "Dec or Base 10 = " + Dec
Debug "Hex or Base 16 = " + Hex
Debug "Base 62 = " + B62
Debug ""
Debug ""
Debug "Bin or Base  2 = " + Str(Base2Int(Bin, #BINBASE))
Debug "Oct or Base  8 = " + Str(Base2Int(Oct, #OCTBASE))
Debug "Dec or Base 10 = " + Dec
Debug "Hex or Base 16 = " + Str(Base2Int(Hex, #HEXBASE))
Debug "Base 62 = " + Str(Base2Int(B62, #SOIXANTEDEUXBASE))
    
Si quelqu'un a une idée
Elle est la bienvenue 8)

Bonne soirée
Dernière modification par Kwai chang caine le mer. 30/janv./2008 10:11, modifié 1 fois.
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Sans UCASE ça marche bien. 8)

Code : Tout sélectionner

c = FindString("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", Mid(Value, i, 1), 1)
@ peluche
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour LNA

Mais quel c.. mais quel c... :oops:

Dicton du jour :
Quand tous les cons voleront, j'userais plus de chaussures :D
Merci beaucoups de ton aide 8)
Je te souhaite une excelente journée
Répondre