Convertir données hexa en caracteres

waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 27 nov. 2004 à 07:45
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 27 nov. 2004 à 19:02
bonjour,

voila mon probleme: g un fichier txt de plusieures centaines de ko contenant des données hexa:

ex:
616261697373657200646570726573732C206C6F7765722C206272696E6720646F776E2C207075736820646F776E2C2072656475636500616261697373657220287065727329006162617365006162616E646F6E6E6572007468726F77206F7665722C2061626F72

je voudrais convertir ces données hex avec les caracteres correspondants puis enregistrer le fichier.

donc si qq1 a une solution rapide car la je seche (j'arrive a convertir des caractere en hexa mais pas l'inverse), merci d'avance.

5 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
27 nov. 2004 à 11:45
    Dim nom1 As String
    Dim nom2 As String
    Dim i    As Integer
    Dim nb   As Integer
    Dim T1() As Byte
    Dim T2() As Byte
    
    nom1 = "C:\...\FichierEntrée.txt"
    nom2 = "C:\...\FichierSortie.txt"
    
    Open nom1 For Binary As #1
         nb = LOF(1)
         ReDim T1(nb - 1)
         Get #1, , T1
         Close #1
         
    ReDim T2(nb \ 2 - 1)
    
    For i = 0 To nb - 2 Step 2
        T2(i \ 2) = (T1(i) - 48) * 16 + T1(i + 1) - 48
        Next

    Open nom2 For Binary As #1
         Put #1, , T2
         Close #1


Daniel
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
27 nov. 2004 à 16:16
merci daniel, ta soluce marche nikel

sinon g aussi trouvé une solution, dite ce que vous en pensez:

Dim a As Long
Dim s2 As String
Dim s1 As String
s1 s2 ""
Open c For Input As #1
s1 = Input(LOF(1), #1)
Close #1
For a = 1 To Len(s1) Step 2
s2 = s2 & Chr(Val("&H" & Mid(s1, a, 2)))
Next

Open c For Output As #1
Print #1, s2;
Close #1
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
27 nov. 2004 à 16:24
J'ai une autre solution, peut être plus rapide car pas d'analyse de chaine et le fichier pas totalement chargé en mémoire, à tester :

Dim variable As String * 2
Dim i As Long
Dim lg As Long

lg = (FileLen("c:\temp\essai1.txt") / 2) - 1
Open "c:\temp\essai1.txt" For Random As #1 Len = Len(variable)
Open "c:\temp\essai2.txt" For Output As #2
For i = 1 To lg
Get #1, i, variable
Print #2, Chr$(CInt("&H" & variable));
Next
Close #1
Close #2


Le résultat que ça me donne à partir de ton exemple c :

abaisser depress, lower, bring down, push down, reduce abaisser (pers) abase abandonner throw over, abor

Cordialement, CanisLupus
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
27 nov. 2004 à 16:34
en fait g parler trop vite, avec ta solution daniel, j'obtient un depassement de capacité a la ligne suivante;

T2(i \ 2) = (T1(i) - 48) * 16 + T1(i + 1) - 48

donc pour le moment je reste sur ma solution
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
27 nov. 2004 à 19:02
je corrige quand même ma ligne, je suis obligé de repasser par des chaînes, pas trouvé mieux pour l'instant.

T2(i \ 2) = Val("&H" & Chr$(T1(i))) * 16 + Val("&H" & Chr$(T1(i + 1)))

Daniel
0
Rejoignez-nous