[Base 36 vers base 10]

Utilisateur anonyme -  
 Nairod -
Bonjour,
Savez-vous comment je peux faire pour transformer un chiffre en base 36 vers la base 10 sous VBA (Access).
Merci beaucoup
A voir également:

4 réponses

TuXor Messages postés 97 Statut Membre 25
 
C re moi, et je pense a voir une reponse a t'apporter,

Pour passer en base 10, il suffit de prendre la première partie de ton nombre en base 36 et de le multiplier par 36^0 c'est à dire 1(pas trop dur jusqu'ici), ensuite, tu ajoute à cela la seconde partie que tu multiplie par 36^2(puissance 2) et aini de suite ...

Si ma reponse te semble bizzard vérifie avec d'autres sources, mais je pense que c'est ça, d'aprés les restes de cours d'archi dont je me rappel
0
Utilisateur anonyme
 
T'as vraiment réponse à tout!!!
C'est bien des gens comme ça!

Dans mon exemple, le code en base 36 est le suivant :
2K3ZL79Q
Or d'après les données qui sont liées, en base 10 ça donne :
200505149198
Tu y comprends quelque chose?
Car tous les codes que j'ai trouvé ne marchent pas avec les caractères alphanumériques .....

Je vais bien réussir à te poser une colle...
0
random Messages postés 1612 Statut Membre 155
 
essaye avec ca
Function dbase(ByVal nb As String, base As Variant) As String
Dim boucle As Integer
Dim cara As Variant
Dim rep As Variant
For boucle = 1 To Len(nb)
cara = Mid(nb, boucle, 1)
If cara > 9 Then
cara = Asc(cara) - 55
End If
cara = cara * (base ^ (Len(nb) - boucle))
rep = rep + cara
Next boucle
dbase = rep
End Function
tu peux essayer avec dbase("MAMAN"36)
0
random Messages postés 1612 Statut Membre 155
 
après vérif ton résultat est correct
0
Utilisateur anonyme
 
Merci beaucoup
Mais apres verif, t'avais oublié une virgule.....
0
random Messages postés 1612 Statut Membre 155
 
ps cette fonction est sensible à la casse
a est different de A
0
Utilisateur anonyme
 
De toute façon, ce sera un code renoyé par un lecteur code barre, donc toujours du même type. Pas de risque de minuscules...
Merci encore
0
TuXor Messages postés 97 Statut Membre 25
 
Pardon pour l'erreur dans l'explication pour le passage en base 10 depuis la base 36, c'est pas très grve mais bon...

ensuite, tu ajoute à cela la seconde partie que tu multiplie par 36^2(puissance 2)

En fait le second caractère est à multiplier par 36^1 donc 36 !

voila c'est corrigé, sinon le code de notre ami random a l'air tout à fait correct.

Bonne prog.
0
TuXor Messages postés 97 Statut Membre 25
 
Petit ajout juste pour la culture,
puisque tu a l'air d'avoir résolu ton problème.

Comme les chiffres utilisables pour former des codes sont au nombre de 10 caractères maxi(en contant le zéro), on utilise les lettres en leur donnant des valeurs à partir de 10 jusqu'a 35 !

A == 10 et Z == 35

voila qui devrait répondre a ton interrogation qui figure plus haut.
0
Utilisateur anonyme
 
OK la conversion marche parfaitement dans le sens base 36 vers base10.
Mais comment faire pour le sens base 10 vers base 36?
Comme je n'ai pas tout compris au code......
0
random Messages postés 1612 Statut Membre 155 > Utilisateur anonyme
 
Function chgtbase(ByVal nb As Currency, base As Integer) As String
Dim repnomb As String
Dim modu As Variant
Dim divi As Currency
Do
divi = Int((nb / base))
modu = nb - (divi * base)
If modu > 9 Then modu = Chr(modu + 55)
repnomb = modu & repnomb
nb = divi
Loop Until nb < base
If nb > 9 Then
repnomb = Chr(nb + 55) & repnomb
Else
repnomb = nb & repnomb
End If
chgtbase = repnomb
End Function
0
random Messages postés 1612 Statut Membre 155
 
à titre d'xplication
ben pour comprendre le code c'est facile
prends 123 en décimal il représente
3 unités
2 dizaines soi 2*10
1 centaine 1*10*10
ton nombre base 36 est 2K3ZL79Q
le chiffre des unités est Q le code asci de Q est 81
le code asci de A est 65, et il va representer 10 dans les bases supérieures à 10 sa valeur est donc 81-55 soit 26
le chiffre suivant est 9 sa valeur est donc 9*36
puis 7 qui vaudra 7*36*36
puis L code 76-55=21*36+36*36
je continue et je fais la somme des résultats intermédiaires
0
Nairod
 
Petite précision : ce n'est pas "puis L code 76-55=21*36+36*36"
mais c'est : "puis L code 76-55=21*36*36*36" car c'est 36^3
0