Conversion de nombres en base x

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

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.