cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 août 2008
-
26 juil. 2004 à 16:02
cs_bobo91
Messages postés107Date d'inscriptiondimanche 27 juin 2004StatutMembreDernière intervention12 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
cs_bobo91
Messages postés107Date d'inscriptiondimanche 27 juin 2004StatutMembreDernière intervention12 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
cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 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.
--------------------------------------------------------------------
cs_bobo91
Messages postés107Date d'inscriptiondimanche 27 juin 2004StatutMembreDernière intervention12 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
cs_bobo91
Messages postés107Date d'inscriptiondimanche 27 juin 2004StatutMembreDernière intervention12 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.
cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 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
--------------------------------------------------------------------
cs_bobo91
Messages postés107Date d'inscriptiondimanche 27 juin 2004StatutMembreDernière intervention12 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
cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 août 2008 26 juil. 2004 à 20:29
sa marche m1tenan mais quesque c'est lent, qq1 sait cmment je pourrais optimiser le code ?
--------------------------------------------------------------------
cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 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..
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 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.
cs_bobo91
Messages postés107Date d'inscriptiondimanche 27 juin 2004StatutMembreDernière intervention12 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.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 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
cs_bobo91
Messages postés107Date d'inscriptiondimanche 27 juin 2004StatutMembreDernière intervention12 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.
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.
cs_windob
Messages postés225Date d'inscriptiondimanche 19 octobre 2003StatutMembreDernière intervention25 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