Conversion base 10 <====> base 256 (code ascii)

Contenu du snippet

Ce code permet de convertir un nombre entier en chaîne de caractère.
L'intérêt est que cela fait gagner beaucoup de place (par exemple quand on écrit dans un fichier de sauvegarde DAT).
De même, on peut traduire une chaîne de caractère en un nombre en base10.
Toutes les limites de valeurs sont indiquées dans les lignes de commentaires. D'ailleurs, n'hésitez pas à les supprimer : elles prennent la moitié du code.

Source / Exemple :


Sub Conversion256(Base10)
    On Error Resume Next     'Evite les erreurs de dépassement de capacités
    'Valeur maximum pour Base10 = 9223372036854775
    'Initialisation des valeurs
    Puissance256 = 0
    Base256 = ""
    'Calcul de la puissance en base 256 du nombre en base 10
    CP1 = Base10
    While (CP1 / 256) >= 1
        Puissance256 = Puissance256 + 1
        CP1 = Int(CP1 / 256)
    Wend
    'Ecriture de la chaîne caractère Base256
    For a% = 0 To Puissance256
        CP2 = Int(Base10 / 256 ^ (Puissance256 - z%))
        Base256 = Base256 + Chr(CP2)
        Base10 = Base10 - (CP2 * (256 ^ (Puissance256 - z%)))
    Next a%
    'à la sortie de la fonction, on a le nombre désiré en base 256, soit en mode ASCII 256.
    'remarque: la plage de caractère va de 0 à 255 et non de 1 à 256.
    Exit Sub
End Sub

'exemple: codage de 64345 en base 256
'64345 = 251 * 256 ^ 1 + 89 * 256 ^ 0
'Base256 = Chr(251) & Chr(89) = "ûY"

Sub Conversion10(Base256)
    On Error Resume Next     'Evite les erreurs de dépassement de capacités
    'Valeur maximum pour Base256 = "ÿÿÿ" = Chr(127) & Chr(255) & Chr(255) & Chr(255)
    'Initialisation de Base10
    Base10 = 0
    'Ecriture de la chaîne caractère Base10
    For b% = 0 To Len(Base256) - 1
        Base10 = Base10 + (Asc(Right(Base256, 1)) * 256 ^ b%)
        Base256 = Left(Base256, Len(Base256) - 1)
    Next b%
    'à la sortie, on a le nombre en base 10 tiré d'une chaîne de caractère
End Sub

'exemple: décodage de "+7" en base 10
'Base256 = Chr(43) & Chr(55) = "+7"
'Base10 = 55 * 256 ^ 0 + 43 * 256 ^ 1 = 11063

Conclusion :


Au cas où ce code comporterait des bugs, n'hésitez pas à me le signaler.

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.