[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

4 réponses

  1. 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
    1. 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
    2. 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
  2. random Messages postés 1612 Statut Membre 155
     
    après vérif ton résultat est correct
    0
    1. Utilisateur anonyme
       
      Merci beaucoup
      Mais apres verif, t'avais oublié une virgule.....
      0
  3. random Messages postés 1612 Statut Membre 155
     
    ps cette fonction est sensible à la casse
    a est different de A
    0
    1. 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
    2. 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
    3. 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
    4. 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
    5. 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
  4. 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
    1. 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