Longueur d'une phrase avec des Chr(0)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Longueur d'une phrase avec des Chr(0)

Message par Kwai chang caine »

Bonjour à tous

Alors voila...j'me suis encore mis dans la "oumpha" :?
Toujours dans l'analyse de ce qui sort du compilateur de ce "cher" VB.
J'ai découvert que "pour une fois"' ce cher bilou, il a décidé de pas faire comme les autres quand a la compilation des valeurs de variables en dur.

Kcc y s'explique.....

Quand je regarde un exe avec notepad, qu'est ce que je "m'appercois-je" ???
Si j'ai mis un :

Code : Tout sélectionner

a$ = "Kcc y met son groin partout"
Et ben notre magique PB il ecrit "Kcc y met son groin partout" dans l'exe et c'est donc facile de le retrouver.
Il est pas pretentieux le PB, y touche pas à l'oeuvre de KCC, il respecte le copyright :D

Mais passons à ce "cher" VB......et ben bilou, y fait une grosse crotte avec le copyright de KCC :?
Et en plus le sale, y s'assoit dessus :twisted:

Lui il ecrit "K" + chr(0) + "c" + chr(0) ........"et de c'est les tera"
Donc ce profanateur de code, y rajoute un chr(0) entre chaque caractere.
Surement encore une histoire d'UNICODE, enfin je pense.

Bref KCC y se retrouve avec cette phrase moitié texte moitié chr(0)
Et y s'en voit drolement parce qu'il veut ecrire a la place de cette phrase une autre phrase.
Comme les super hackers qui patchent les exe :D

Sauf que KCC.....c'est "BurnecKer"...une nouvelle race de Hacker car ce sont les seuls qui craquent leur propres programmes dont ils ont le code source :lol:

Donc ma question est....car je suis sur que j'ai été aussi clair que la vase d'un etang qui a pas été curé depuis 10 ans :oops:

Si j'ai la phrase

Code : Tout sélectionner

"X" + chr(0) + "X" + Chr(0) + "X" + Chr(0)
Ecrite dans mon exe, avec quoi je peux ecrire dedans, pour la remplacer par :

Code : Tout sélectionner

"K" + chr(0) + "C" + Chr(0) + "C" + Chr(0) 


Voici le petit code que j'ai fait, mais ça coince tout de suite, car le LEN(Phrase) y s'arrette au premier chr(0) et donc me compte que 1 caractere :?
En fait j'etais parti du super genial code du non moins super genial SOLDAT.....
Mais j'lai tellement esquinté...que meme le soldat apres 5 guerres y serait en meilleur etat :oops:

Code : Tout sélectionner

Phrase.s = "K" + Chr(0) + "C" + Chr(0) + "C" + Chr(0)
LongueurPhrase = Len(Phrase)
Mem = AllocateMemory(6)

If OpenFile(0, "Exe.exe")

 ReadData(0, Mem, 6) 
     
 If Not CompareMemory(@Phrase, Mem, LongueurPhrase)
  FileSeek(0, Loc(0) - LongueurPhrase)
  WriteData(0, @Phrase, LongueurPhrase) 
 EndIf
     
EndIf
Merci de votre aide
Et bonne journée
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

coucou,

et, au cas où, avec StringByteLength(string.s, #PB_Unicode)

:?:


(tu vois je suis toujours là :twisted: )
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Oouuuaaaahhh !!!! mon roi FLIPOUNET 1er 8O 8)

Tu peux pas savoir ce que tu me fais plaisir, de me repondre comme dans le temps 8)
Effectivement tel un dieu tu est de nouveau la, une main sur le clavier et l'autre sur le rebord de mon berceau, pour surveiller d'un oeil bienfaiteur ton humble et bien modeste serviteur :D

StringByteLength.....mais d'ou tu le sort encore celui la :?
Je fais F1 et pouf ...il apparait, a croire que le CHM il a changé entre le temps que j'ai passé des heures a regarder et celui de ta reponse :oops:

Bon je vais de ce pas, le dire a ma maman.....non ..ça c'etait avant ...je vais de ce pas essayer :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bon me rev"l'a....

Alors j'ai fait "tout ça comme tu m'as dit" :D

Mais il est "grolement mechant" ce LEN truc chouette, y veux pas me donner 6

Image

Code : Tout sélectionner

Phrase.s = "K" + Chr(0) + "C" + Chr(0) + "C" + Chr(0)
Debug StringByteLength(Phrase, #PB_Unicode)
Reponse:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Kwai chang caine a écrit :Bon me rev"l'a....

Code : Tout sélectionner

Phrase.s = "K" + Chr(0) + "C" + Chr(0) + "C" + Chr(0)
Debug StringByteLength(Phrase, #PB_Unicode)
Reponse:
normal si tu debug phrase.s tu n'aura que "K" !!

tu ne peux pas y arriver comme ça !!

la seul soluce est d'utiliser FileSeek(#Fichier, Position.q)
avec ça tu saute les Chr(0)
pour ne lire qu'une valeur sur 2 dans ton fichier !! :)
et ainsi refabriquer un fichier Saint ! :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour DOBRO

A ouaih !!!!!
C'est comme dans la vie alors !!!!!
C'est le Q qui fait toute la difference :D

En fait si j'ai bien compris, Q lit 2 octets ???? :roll:
Et il saute donc ce Chr(0) d'UNICODE

J'ai vérifié....si je compile en UNICODE ....PB y sort la meme "scata" que VB.
Mais heureusement, par defaut PB il est pas unicode

Merci DOBRO 8)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

.................
Dernière modification par Backup le sam. 01/oct./2011 12:36, modifié 3 fois.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Salut.

Code : Tout sélectionner

Phrase.s = Chr(34) + "K" + Chr(34) + " + Chr(0) + " + Chr(34) + "C" + Chr(34) + " + Chr(0) + " + Chr(34) + "C" + Chr(34)

Debug Phrase
Phrase = RemoveString(Phrase, " + Chr(0) + ")
Phrase = RemoveString(Phrase, Chr(34))
Debug Phrase

Debug StringByteLength(Phrase, #PB_Unicode)
On obtient 6, après je sais pas si ce truc t'avance :lol: .

Bye.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

j'ai corrigé mon code ci dessus , c'etait n'imp :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci DOBRO,

J'ai modifié ton code car il voulais pas lire le fichier et y'avais une petite erreur dans le Readstring
Mais à part ça je me retrouve avec un fichier de 2 mega pour un fichier de depart de 204 ko
J'ai du merder queque part :roll:

Par contre j'ai une question ????
Le Chr(0) en UNICODE il est devant ou derriere ???

Code : Tout sélectionner

lettre$ = "E"
file$ = OpenFileRequester("Select a file","","Text (.txt)|*.txt|All files (*.*)|*.*",0) 

If file$ 
  
  If ReadFile(0, file$) 
    OpenFile(2,"c:\fichier_modifie.txt") ; le fichier de sauvegarde 
    While Eof(0) = #False                      ;temps que le fichier est pas fini 
      FileSeek(0, Pos.q)              ; place le pointeur au bon endroit 
      lettre$=ReadString(0) ; lit le caractere du fichier 1 
      WriteString(2,lettre$) ; ecrit ce caractere dans le fichier de sauvegarde 
      Pos=Pos+2 ; on saut le chr(0) 
    Wend 
    ; on a fini 
  EndIf 
  CloseFile(0) 
  CloseFile(2) 
EndIf 
@Geotrouvepatout
Je me demande si y compte pas les guillements ton code :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

On a posté en meme temps.
J'essaie le nouveau :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bah cette fois....c'est mieux.
Mais mon fichier original passe de 204 ko a 28 ko.
Je crois que tu viens d'inventer un algorythme de compression de fichier encore meilleur que WINRAR :D

Et au fait ce Chr(0) il est devant ou derriere ???? :roll:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

arg !! retest là !!! :D c'est bon !! :)

j'ai mis une procedure de relecture

j'utilise readbyte , au lieu de string ;)


en principe le chr(0) est derriere ... mais bon :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bah j'y comprend rien...
Je divise encore par deux le nouveaux fichier
Ce serait pas parce que l'on avance de 2 par 2 et que peut etre on reecris pas deux caracteres ??? :roll:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Kwai chang caine a écrit :Bah j'y comprend rien...
Je divise encore par deux le nouveaux fichier
Ce serait pas parce que l'on avance de 2 par 2 et que peut etre on reecris pas deux caracteres ??? :roll:
ben si !! on retire les chr(0) :)

"fichier_modifie.txt" est la version sans chr(0) de ton fichier d'origine :)

tu peux reecrire ce que tu veux dedans
et faire l'operation inverse (réinclure les chr(0) si tu veux ;))

meme si je vois pas a quoi ils servent les chr(0) ;)
Répondre