Bonjour
Je te remercie denis de ta reponse rapide à mon probleme qui m'empechait de continuer mon application.
Le 1er code c'est de la balle, il marche super bien.
Par contre pour le deuxieme, je ne suis pas arrivé à le faire marcher.
Il traine et ne renvois pas un bon resultat.
Quoi qu'il en soit je te remercie de ta peine.
Et je garde le premier qui me conviens parfaitemement.
Parrallelement à toi, patrick88 m'a répondu en m'envoyant un convertisseur complet bin/hexa et hexa/bin.
J'en fait profiter tout le monde, je pense que ce doit etre son souhait.
Je vous remercie donc tous pour votre gentillesse et votre compétence.
Grace à vous je ne me sent pas seul devant la complexité de ce language.
Excelente journée.
Message de Patrick88 :
à l'arrache comme ça, il y a un bug ,
le fichier résultat est plus petit de un octet ?? ? pas trouvé pourquoi
Code : Tout sélectionner
; Code créé par patrick88
; sur Pb 4.0
#src = 0
#dst = 1
Enumeration
#main
#bouton1
#bouton2
EndEnumeration
Procedure.s fRepEnCours()
appdir$ = Space(255)
GetCurrentDirectory_(255, @appdir$)
If Right(appdir$, 1) <> "\" ; si l'adresse ne finit pas par "\"
appdir$ = appdir$ + "\" ; on rajoute le "\"
EndIf
ProcedureReturn appdir$
EndProcedure
Procedure ecrit_hexa()
FichierParDefaut$ = fRepEnCours()+"*.txt"
Filtre$ = "Texte (*.txt)|*.txt|executable (*.exe)|*.pb|Tous les fichiers (*.*)|*.*"
Filtre = 1
source$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
If source$
path$= GetPathPart(source$)
ext$ = GetExtensionPart(source$)
name$ = GetFilePart(source$)
destin$ = path$ + Left(name$,Len(name$)-Len(ext$)) + "hexa"
OpenFile(#src,source$)
CreateFile(#dst,destin$)
Repeat
octet=ReadByte(#src)
octet=octet&$FF
If octet<16
WriteString(#dst,"0"+Hex(octet)+",")
Else
WriteString(#dst,Hex(octet)+",")
EndIf
Until Loc(#src)=Lof(#src)
WriteString(#dst,"1A")
CloseFile(#dst)
CloseFile(#src)
EndIf
EndProcedure
Procedure hexa_vers_decimal(valeur$)
octet1.b = 0
octet2.b = 0
valeur_entiere.b = 0
car1.b = Asc(Right(valeur$,1))
Select car1
Case Asc("A") To Asc("F")
; Debug Asc("A") = 65 , A en hexa = 10 en décimal
octet1 = car1-55
Case Asc("0") To Asc("9")
octet1 = Val(Chr(car1))
EndSelect
car2.b = Asc(Left(valeur$,1))
Select car2
Case Asc("A") To Asc("F")
; Debug Asc("A") = 65 , A en hexa = 10 en décimal
octet2 = car2-55
Case Asc("0") To Asc("9")
octet2 = Val(Chr(car2))
EndSelect
valeur_entiere = (octet2*16)+octet1
ProcedureReturn valeur_entiere
EndProcedure
Procedure convertit_hexa()
FichierParDefaut$ = fRepEnCours()+"*.hexa"
Filtre$ = "Hexa (*.hexa)|*.hexa|Texte (*.txt)|*.txt|executable (*.exe)|*.pb|Tous les fichiers (*.*)|*.*"
Filtre = 0
source$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
octet.b
If source$
path$= GetPathPart(source$)
ext$ = GetExtensionPart(source$)
name$ = GetFilePart(source$)
destin$ = path$ + Left(name$,Len(name$)-Len(ext$)) + "bin"
OpenFile(#src,source$)
CreateFile(#dst,destin$)
While Eof(#src)=0
chaine_octet$=ReadString(#src)
For i = 1 To CountString(chaine_octet$,",")-1
octet$ = StringField(chaine_octet$,i,",")
octet = hexa_vers_decimal(octet$)
WriteByte(#dst,octet)
Next
Wend
CloseFile(#dst)
CloseFile(#src)
EndIf
EndProcedure
Procedure main()
If OpenWindow(#main,0,0,200,100,"Dump et restauration de fichier",#PB_Window_SystemMenu|#PB_Window_ScreenCentered )
If CreateGadgetList(WindowID(#main))
ButtonGadget(#bouton1,0,0,WindowWidth(#main),WindowHeight(#main)/2,"Fichier Binaire vers fichier hexa(.hexa)")
ButtonGadget(#bouton2,0,GadgetHeight(#bouton1),WindowWidth(#main),WindowHeight(#main)/2,"Fichier Hexa(.hexa) vers Fichier Binaire")
EndIf
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #bouton1
ecrit_hexa()
Case #bouton2
convertit_hexa()
EndSelect
EndSelect
Until event=#PB_Event_CloseWindow
EndIf
EndProcedure
main()
End