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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 267 fois - Téléchargée 62 fois

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

Ajouter un commentaire

Commentaires

Ton programme est très bien, mais mérite-t-il vraiment une difficulté 3 ?
ceyquem
Messages postés
12
Date d'inscription
mercredi 9 mai 2001
Statut
Membre
Dernière intervention
1 juin 2002
-
il est vrai qu'il est simple. de plus les on error resume next ne sont pas très propres. il vaudrait mieux prévoir une routine qui informe l'utilisateur de l'erreur.

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.