Conversion de nombres en base x

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 678 fois - Téléchargée 86 fois

Contenu du snippet

Avec VB, il est possible de convertir un nombre décimal (base 10) en hexadécimal (base 16): mais il n'est ni possible de faire le contraire, ni de faire d'autre types de conversions. Cette fonction permet de convertir un chiffre d'une base X vers une Base Y: la base pouvant aller du bianire à la base 32 (pour avoir une base plus grande, il faut rajouter des signes dans le dictionnaire).

Source / Exemple :


Private Const DICTIONNARY = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

' Aucune validation n'est faite, ce qui signifie qu'on considère que:
' - Le paramètre Number contient tous des signes valides appartenant au
'   dictionnaire.
' - Les chiffres FromBase et ToBase appartiennent à ]0:Len(Dictionnary)]
Public Function BaseX(ByVal Number As String, ByVal FromBase As Integer, ByVal ToBase As Integer) As String
Dim Number10 As Long ' --- Nombre en base 10 ---------------------------------
Dim Power As Integer ' --- Puissance -----------------------------------------
Dim Idx As Integer   ' --- Index ---------------------------------------------
Dim Sign As Integer  ' --- Chiffre traité ------------------------------------

  ' --- Convertir en base 10 -------------------------------------------------
  If FromBase <> 10 Then
    Power = Len(Number) - 1
    For Idx = 1 To Len(Number)
      Sign = InStr(DICTIONNARY, Mid$(Number, Idx, 1)) - 1
      Number10 = Number10 + (Sign * FromBase ^ Power)
      Power = Power - 1
    Next
  Else
    Number10 = Number
  End If

  ' --- Convertir en base X --------------------------------------------------
  If ToBase <> 0 Then
    Power = 0
    While Number10 > 0
      Sign = Number10 Mod ToBase
      BaseX = Mid$(DICTIONNARY, Sign + 1, 1) & BaseX
      Number10 = (Number10 - Sign) / ToBase
    Wend
  Else
    BaseX = Number10
  End If
End Function

Conclusion :


Vous pourrez, entre autres, utiliser cette fonction pour les conversions courantes:
- Base2 <-> Base10
- Base2 <-> Base16
- Base10 <-> Base 16
- ...

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
4 janvier 2008

génial...
Messages postés
65
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
5 juin 2012

Bien joué!
Messages postés
38
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
9 décembre 2008

C'est vraiment génial!!!
Chapeau.
En tout cas, ça m'est très utile.
Merci beaucoup.
Vautour32
Messages postés
13
Date d'inscription
jeudi 16 décembre 2004
Statut
Membre
Dernière intervention
19 décembre 2006

trop bon :)

par contre on peut optimiser en laissant le DICO et on modifie la ligne qui s en sert part :


BaseX = Number Mod ToBase & BaseX
Messages postés
30
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
7 mars 2012

Très belle fonction.
Merci

Multipac
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.