Convertion hexa

cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008 - 26 juil. 2004 à 16:02
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006 - 27 juil. 2004 à 15:33
slt a tous,

je voudrais convertir un fichier en hexa decimal mais en codant en hexa le code ascii de chaque caractere de mon fichier , mais je n'obtient pas du tt la mm choz q'ac hex workshop. je ne comprend pas pk, hw met des 0 partout

merci
--------------------------------------------------------------------

l'avenir appartient a ceux ki program tot ;) ;)

22 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
26 juil. 2004 à 18:17
Salut,

pour coder un car en hexa : hex(asc(car))
pour l'inverse : Chr("&H" & valhexa)

exemple :
Hex(Asc("A"))
Chr("&H" & "41")

Cordialement

CanisLupus
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 18:38
moi mon prob n'est pas tellement la convertion mais comme fais un editeur hexadecimal j'aimerais qu'il me saute une ligne tous 1 ligne tous les 32 octet
ex: 000011112222333344445555666677778888
555566667777888899991111444455553333

soit tous 8 groupes de 2hexa.cela dit j'ai beau lui dire chr(13) ou autre chose il saute pas les ligne.
pourrais m'aider stp.(j'ai pas mi l'erreur boite et les extention je m'en passe)

Private Sub Command1_Click()
cdl.ShowOpen
Text1 = cdl.FileName

End Sub

Private Sub Command2_Click()
Open Text1 For Binary As #1
LNG = FileLen(Text1)
a = Input(LNG, #1)
For I = 0 To LNG - 1
X = Hex(Asc(Mid(a, I + 1, 1)))
If Len(X) = 1 Then
X = "0" & X
End If
Y = Y & X
If Len(Y) = 32 Then
RichTextBox1.Text = (Y) & (chr13)
Y = ""
End If
Next I
If Y <> 0 And Y < 32 Then
RichTextBox1.Text = Y
End If
Close #1
End Sub
0
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
26 juil. 2004 à 18:39
oui je sais c'est deja ce que je fais mais je n'obtient pas le meme resultat que avec un editeur hexa et c'est ce que je voudrais.
si qq1 sai comment on peut faire...

merci kd mm.
--------------------------------------------------------------------

l'avenir appartient a ceux ki program tot ;) ;)
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
26 juil. 2004 à 18:55
<winbob>, en tapant "editeur hexa" ds la zone de recherche de vbfrance, tu auras plein de réponses.

, essaie RichTextBox1.Text = (Y) & (chr13) & chr(13)

Cordialement

CanisLupus
0

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

Posez votre question
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 18:58
avec mon code si j'ai tester tu obtien exactement la mem chose.
mais je m'adressai a canislupus pour k'il me resoud mon prob aussi tien t'a qu'a prendre ma source elle fonction mais je veux qu'elle saute les lignes. canis lupus help me please.

soit tous 8 groupes de 2hexa.cela dit j'ai beau lui dire chr(13) ou autre chose il saute pas les ligne.
pourrais m'aider stp.(j'ai pas mi l'erreur boite et les extention je m'en passe)

je te remet la source et enlever ce que tu n'a pas besoin.

Private Sub Command1_Click()
cdl.ShowOpen
Text1 = cdl.FileName

End Sub

Private Sub Command2_Click()
Open Text1 For Binary As #1
LNG = FileLen(Text1)
a = Input(LNG, #1)
For I = 0 To LNG - 1
X = Hex(Asc(Mid(a, I + 1, 1)))
If Len(X) = 1 Then
X = "0" & X
End If
Y = Y & X
'If Len(Y) = 32 Then
RichTextBox1.Text = (Y) '& (chr13)
'Y = ""
'End If
Next I
'If Y <> 0 And Y < 32 Then
'RichTextBox1.Text = Y
'End If
Close #1
End Sub
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 19:07
j'ai deja essayer les chr(13) & chr(13)
et aussi les variables
mais rien a faire c'est peu t'etre du fait que c'est un richtextbox
mais comme meme il doit bien avoir un moyen de faire sauter des ligne.
je vois pas du tous la.
j'ai fais le forum y'a ke des texbox a ce sujet

par compte ca ca marche
RichTextBox1.Text = (Y) & Chr(13) & "gkvgkjvglhvblh"
mais vu ke je fais une boucle et que ma chaine est dans une variable que je connais pas je peux rien faire la ca me prend la tete.

si quelqu'un a une reponse a mon prob.
merci.
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 19:08
les "constantes" de saut de ligne pardon je l'ai est tester aussi
0
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
26 juil. 2004 à 19:22
heu bobo91 c'etait pas a toi ke je parlé tt a leur , dsl, c juste ke t'a du repondre pendabt ke je postai et que j'aipas vu ta réponse
--------------------------------------------------------------------

l'avenir appartient a ceux ki program tot ;) ;)
0
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
26 juil. 2004 à 19:30
heu dsl bobo91 mé ché moi sa marche pas
sa met 32 fois '0' é c tout
--------------------------------------------------------------------

l'avenir appartient a ceux ki program tot ;) ;)
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 20:17
je remet le code au cas ou il y aurai une petite erreur sa marche totalement moi.
il m'affiche tous le fichier en hexa dans le richtextbox je vais manger.a tout a l'heure peur etre.il y a juste a copier la source et a modifier le nom des objet

Private Sub Command1_Click()
cdl.ShowOpen
Text1 = cdl.FileName

End Sub

Private Sub Command2_Click()
Open Text1 For Binary As #1
LNG = FileLen(Text1)
a = Input(LNG, #1)
For I = 0 To LNG - 1
X = Hex(Asc(Mid(a, I + 1, 1)))
If Len(X) = 1 Then
X = "0" & X
End If
Y = Y & X
'If Len(Y) = 32 Then
RichTextBox1.Text = (Y) '& Chr(13) & Chr(13)
'RichTextBox1.Text = "BOBO"
'Y = ""
'End If
Next I
'If Y <> 0 And Y < 32 Then
'RichTextBox1.Text = Y
'End If
Close #1
End Sub
0
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
26 juil. 2004 à 20:29
sa marche m1tenan mais quesque c'est lent, qq1 sait cmment je pourrais optimiser le code ?
--------------------------------------------------------------------

l'avenir appartient a ceux ki program tot ;) ;)
0
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
26 juil. 2004 à 20:38
re

alors heu bobo g réussi a optimiser un peu le code en mettant tout simplement l'ecriture dans la rtb apres la boucle sa donne sa :

Private Sub Command2_Click()
Open Text1 For Binary As #1
LNG = FileLen(Text1)
a = Input(LNG, #1)
For I = 0 To LNG - 1
X = Hex(Asc(Mid(a, I + 1, 1)))
If Len(X) = 1 Then
X = "0" & X
End If
Y = Y & X
Next I
RichTextBox1.Text = (Y)
Close #1
End Sub

par contre dsl, g effacé lé commentaires.

si qq1 sait encor comment optimiser le code ... les conseils sont les bienvenus..

merci
--------------------------------------------------------------------

l'avenir appartient a ceux ki program tot ;) ;)
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
26 juil. 2004 à 20:44
Puisque tu t'adressais à moi un peu plus haut, g revisité tn code mais faut pas en faire une habitude car la question d'origine était posée par <windob> :

RichTextBox1.Text = ""
Open Text1 For Binary As #1
LNG = FileLen(Text1)
a = Input(LNG, #1)
For I = 0 To LNG - 1
X = Hex(Asc(Mid(a, I + 1, 1)))
If Len(X) = 1 Then
X = "0" & X
End If
Y = Y & X
If Len(Y) = 16 Then
RichTextBox1.Text = RichTextBox1.Text & (Y) & Chr(10)
Y = ""
End If
Next I
Close #1

Pour <winbob> dsl, je ne connais pas "hex workshop", si le conseil que je t'ai donné ne te convient pas, donne moi au moins un morceau de code, que je puisse t'aider.

Cordialement

CanisLupus
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 21:58
pour te repondre franchement je n'est pas pose ma source pour embeter le monde mais parce que sont sujet colle parfaitement au mien.et que je lui en ai fait profiter un peu je pouvai tres bien faire un autre sujet comme "saut de ligne " mais je voulai repondre en meme temps a son probleme de convertion.
je m'en excuse bien evidemment.

sinon pour ton code c'est merveilleux ca fonctionne et je t'en remercie. mais.......(je rigole,t'1kiete je vais pas relancer ca)
cette technique consisterai a recopier tout le text deja trouver
a chaque fois qu'il trouve une chaine complete.(je me trompe?)
ca fonctionne c'est deja cool mais ci une moindre personne trouvais plus optimiser n'esiter pas a poter votre technique.
pour l'instant je vais utiliser ta solution canislupus.
merci infiniment.
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
26 juil. 2004 à 22:49
Ben, si tu veux parler de charger tout le fichier en mémoire, ds le style prôné par certains ici :

Open Text1 For Binary As #1
LNG = FileLen(Text1)
a = Input(LNG, #1)

je trouve ça débile même si on a des gigas de ram car c valable que pour de très petits fichiers (imagine que tu aies un fichier de 300Mo). Mais bon, je suis parti de ton ex.

Si ton fichier n'est pas un multiple de 16, évidemment, la dernière chaine, il faut que tu la complète avec des 0 ou autres et ça, quelque soit la méthode que tu as choisi, il faut que tu le gères.

En attendant, g testé sur un fichier txt contenant : 000000001111111122222222
et ça ma donné ça :
3030303030303030
3131313131313131
3232323232323232

N'est ce pas ce que tu voulais ?

@+ ;-)

Cordialement

CanisLupus
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 23:06
excuse moi mais je voulai parler de cette ligne la:
RichTextBox1.Text = RichTextBox1.Text & (Y) & Chr(10)
cela (pour moi):
sinifie que le richtextbox va recopier tout ce k'il avais dans son richtext + une chaine de 16 et ainsi de suite.
est -il obliger de recuperer tous ce qu'il avait avant pour lui dire de le recopier.parce que la le tampon il doit y aller le coco.(lol)

le probleme est la et aussi du fait du mode d'ouverture
la j'ai mi tous le fichier dans la memoire tompon(variable a)
mais c'est vrai ke c'est debile(hahahah)

sauf que je sais pas faire une lecture de fichier octet par octet
je ne sais pas comment dire :

lire 32 er octet du fichier
met dans variable a
convertion
copie dans text
variable = ""
lit 32 octet suivant du fichier

je ne sais pas comment faire un lecture direct de l'octet x a l'octet Y.
mais si tu as la solution n'esite pas
merci beaucoup.
0
louisvbfrance Messages postés 31 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 12 mars 2009
27 juil. 2004 à 01:52
Peut-être que tout le monde le sait mais il existe une variable :

VbCrlf , (Carrier return line forward, crois), qui veut dire retour à la ligne, et je crois que ça vaut chr(13) + chr(10).

exemple : msgbox ("Bonjour" & vbcrlf & vbcrlf & "2 Sauts de ligne")

Julien :)
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
27 juil. 2004 à 09:11
Pour info vbCRLF siginifie Carriage Return And Line Feed.Et il existe vbCR et vbLF. Et effectivement, vbCRLF vbCR & vbLF Chr$(13) & Chr$(10)

Christophe R.
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
27 juil. 2004 à 12:38
Aurais-tu déjà oublié ta propre question ? : http://www.vbfrance.com/forum.v2.aspx?ID=263133

Alors, je répète en un peu amélioré pour lire caractère par caractère :

Dim a As String * 1 ' buffer pour recevoir 1 caractère
Dim X As String
Dim Y As String
Dim FILE As String
Dim LNG As Long
Dim i As Long

FILE = "c:\temp\essai.dat" ' le chemin et le nom de ton fic
LNG = FileLen(FILE)
Open (FILE) For Random As #1 Len = Len(a)
For i = 1 To LNG
Get #1, i, a
X = Replace(Format(Hex(Asc(a)), "@@"), " ", "0") ' hexa sur 2 caractères
Y = Y & X
If Len(Y) = 16 Then
RichTextBox1.Text = RichTextBox1.Text & Y & vbCrLf
Y = ""
End If
Next i
RichTextBox1.Text = RichTextBox1.Text & Y ' pour afficher les derniers octets

Pour l'histoire du tampon tu peux pas y couper avec des textbox et des richtextbox.

Pour tes 32 octets (ou caractères) :

Dim a As String * 32 ' buffer pour recevoir 32 caractères (octets)
Dim X As String
Dim Y As String
Dim FILE As String
Dim LNG As Long
Dim i As Long
Dim j As Long

FILE = "c:\temp\essai.dat" ' le chemin et le nom de ton fic
LNG = FileLen(FILE)

Open (FILE) For Random As #1 Len = Len(a)
For i = 1 To LNG / Len(a) + 1
X = ""
Get #1, i, a
For j = 1 To Len(a)
X = X & Replace(Format(Hex(Asc(Mid(a, j, 1))), "@@"), " ", "0") ' hexa sur 2 caractères
Next j
If X <> String(Len(a) * 2, "0") Then
RichTextBox1.Text = RichTextBox1.Text & X & vbCrLf
End If
Next i
Close #1

Un autre ex, si tu veux lire que le 32em caractère du fichier :

Dim a As String * 1 ' buffer pour recevoir 1 caractère (octet)
Dim X As String
Dim Y As String
Dim FILE As String
Dim LNG As Long
Dim i As Long
Dim j As Long

FILE = "c:\temp\essai.dat" ' le chemin et le nom de ton fic
LNG = FileLen(FILE)

Open (FILE) For Random As #1 Len = Len(a)
X = ""
Get #1, 32, a
X = Replace(Format(Hex(Asc(a)), "@@"), " ", "0") ' hexa sur 2 caractères
If X <> String(Len(a) * 2, "0") Then
RichTextBox1.Text = RichTextBox1.Text & X & vbCrLf
End If
Close #1

Encore un autre ex, si tu veux lire que la 2ème chaine de 8 carctères du fichier :

Dim a As String * 8 ' buffer pour recevoir 8 caractères (octets)
Dim X As String
Dim Y As String
Dim FILE As String
Dim LNG As Long
Dim i As Long
Dim j As Long

FILE = "c:\temp\essai.dat" ' le chemin et le nom de ton fic
LNG = FileLen(FILE)

Open (FILE) For Random As #1 Len = Len(a)
X = ""
Get #1, 2, a
For j = 1 To Len(a)
X = X & Replace(Format(Hex(Asc(Mid(a, j, 1))), "@@"), " ", "0") ' hexa sur 2 caractères
Next j
If X <> String(Len(a) * 2, "0") Then
RichTextBox1.Text = RichTextBox1.Text & X & vbCrLf
End If
Close #1

Bon, tout ça c testé et ça marche, tu vois si ça te convient.

Cordialement

CanisLupus
0
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
27 juil. 2004 à 15:06
pour l'histoiredu richtext et textbox, on peu y couper en remplaçant la ligne :
RichTextBox1.Text = RichTextBox1.Text & Y & vbCrLf
par var1 = var1 & Y & vbCrLf
et enfaisant apres les boucles
RicTextBox1.text = var1

sa va plude deux fois plus vite chez moi

--------------------------------------------------------------------

l'avenir appartient a ceux ki program tot ;) ;)
0
Rejoignez-nous