Conversion décimal/hexa et décimal/caractère

Soyez le premier à donner votre avis sur cette source.

Vue 30 629 fois - Téléchargée 1 400 fois

Description

Lorsqu'il s'agit de convertir octet par octet, afin d'optimiser le temps de traitement
(temps de traitement divisé par 2 ou 3 suivant la taille des données à convertir),
cette solution est intéressante :

Créer 2 tables : une table de code hexa ('00' à 'FF') et une table de caractères
('.', 'A' à 'z', ...)

ensuite récupérer soit le code hexa (code_hexa=tab_hexa(i) avec i le nombre
décimal) ou le caractère (caract=tab_ascii(i) avec i le nombre décimal).

Cette méthode est simple, mais oh combien rapide! (plus rapide que l'utilisation
de la fonction hex).

Source / Exemple :


Le code est maintenant dans le zip (plus pratique). J'ai ajouté une form conviviale pour afficher la conversion.

Conclusion :


Je développe un éditeur text/hexa du genre ultraedit et sur la conversion en code hexa, sur des gros fichiers le temps de traitement a été réduit au moins par 2 par rapport à l'utilisation de la fonction HEX$ que j'avais utilisée au début.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
16
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
28 mai 2007

Tu as la conversion décimal/hexa tant que le décimal est inféfieur à 256 (sinon il faut un algorithme avec lequel tu garde le reste de la division par 256 pour attaquer la table).

Si c'est la conversion hexa/deci qui te manque, voici un exemple (il y a d'autres méthodes) :


Public Function conv_hexa_deci(ByVal code_hexa As String, ByVal lgn_hexa As Integer) As Long
Dim c, resultat, val_int As Integer
Dim val_str As String

resultat = 0
For c = 1 To lgn_hexa
val_str = Mid$(code_hexa, c, 1)
Select Case (val_str)

Case "A" To "F"
val_int = Asc(val_str) - 55
Case "0" To "9"
val_int = Asc(val_str) - 48
End Select

resultat = resultat + (val_int * (16 ^ (lgn_hexa - c)))

Next c

conv_hexa_deci = resultat

End Function
Messages postés
278
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
27 avril 2006
1
très bon code et avec l'exemple d'une declaration d'un tableau que j'ai vu mai completemnt oublier :)

il manque qu'une seul chose la convertion du Dec a l'Hexa :)

9/10 :)
Messages postés
134
Date d'inscription
samedi 19 octobre 2002
Statut
Membre
Dernière intervention
3 janvier 2009

Slt !

C'est normal que tu gagne du temsp dans ta source ! Tu n'effectu aucun calcul ! Tu pique just les bon code et caractere dnas un tableau ! Conseil : Pour ganger encore tu temps crer ton table amuellement au lieu d'utiliser split !

Voilà un tableau en VB :

tabunite = Array("o", "Ko", "Mo", "Go", "To", "Po", "Eo", "Zo", "Yo")

@++

Optitech
Messages postés
16
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
28 mai 2007

Voilà, j'ai ajouté le zip où se trouve le code complet, avec en prime une form permettant l'affichage de la conversion.

NB : la chaine de caractère est entre guillemets et la guillememet est échapée, pas de pb pour l'apostrophe (la virgule est forcée après : tab_ascii(44) = ",")

NB2 : pas de boucle for pour l'ASCII car les caractères de 0 à 31 n'étant pas "affichable" comme on l'entant, ils sont remplacés par des points (pour l'hexa je m'étais fais un pgm pour le générer).
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut zifnig
L'idée est bonne si elle fait gagner du temps par rapport au standard Hex et Val("&h" & Hexa)
Par contre, il est inexploitable pour les lecteurs car la chaine stockant tous les caractères ascii n'est pas "copier/collable" (à cause justement des codes ascii qui ne sont pas visualisables)
Deux solutions :
-1- Tu nous ajoutes un petit zip
-2- Tu modifies la création des chaines initiales (plus besoin de Const) comme ceci : (dans le Form_Load pour ne le faire qu'une seule fois)
ReDim tab_ascii(255) As String * 1
ReDim tab_hexa(255) As String * 2
For r = 0 to 255
tab_ascii(r) = Chr(r)
tab_hexa(r) = Format(Hex(r), "##")
Next r
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.