[R] Probleme ecriture 8bits en binaire

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

[R] Probleme ecriture 8bits en binaire

#1

Message par overflow »

Bon voici mon souci
quand j ouvre un fichier en lecture binaire j arrive a lire un octet du fichier n importe ou
Par contre quand je veux écrire , ma valeur 8bits est envoyer en valeur 32 bits ce qui ruine le fichier cible
en gros si je veut ecrire la valeur 255
je me retrouve avec FF 00 00 00 dans mon fichier destination

Code : Tout sélectionner

$File="Data" 

$HWD=FileOpen($File,17)

$data=255

$test=FileWrite($HWD,$data)

FileClose($HWD)

Exit

 
le fichier data c est un fichier "bateau" que j ai creer pour les test

j ai essayer avec hex($data,2) ca fonctionne pas (ca m envois FF en ascii)
j ai essayer avec une structure en déclarant ma variable en byte mais la pareil ça envois en 32bits

si quelqu un a une infos ^^
Modifié en dernier par overflow le ven. 06 janv. 2012 00:45, modifié 1 fois.
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..]Probleme ecriture 8bits en binaire

#2

Message par TT22 »

Est-ce que tu trouve ton bonheur ici : http://autoitscript.fr/forum/viewtopic.php?f=3&t=8923 ?
Cordialement,
TT22
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [..]Probleme ecriture 8bits en binaire

#3

Message par overflow »

Sujet qui traite de la conversion binaire hexa

Moi je veut juste forcer (si on peut ) l ecriture d un octet au lieu de 4
Modifié en dernier par Tlem le mer. 04 janv. 2012 00:35, modifié 1 fois.
Raison : Suppression de la citation inutile
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..]Probleme ecriture 8bits en binaire

#4

Message par jchd »

Les variables AutoIt sont des Variants, donc possèdent un type. Si tu écris une variable de type Int32, tu écris 4 octets, ce n'est pas surprenant.

Si tu tiens à écrire un octet (en anglais : byte) il te faut une structure car il n'existe pas de type "byte" natif, donc voir DllStructCreate.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [..]Probleme ecriture 8bits en binaire

#5

Message par overflow »

overflow a écrit : j ai essayer avec une structure en déclarant ma variable en byte mais la pareil ça envois en 32bits
Oui j ai deja tester ca aussi ^^
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..]Probleme ecriture 8bits en binaire

#6

Message par jchd »

On peut voir ton code qui écrivant un byte d'une structure, écrit en fait 4 octets ?
► Afficher le texte
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [..] Probleme ecriture 8bits en binaire

#7

Message par overflow »

le code du teste avec dllcreate

Code : Tout sélectionner

$bin=DllStructCreate("byte var1")
DllStructSetData($bin,"var1",255)
$File="Data" ;@ScriptName
$HWD=FileOpen($File,17)
FileSetPos($HWD,-8,2)
$test=FileWrite($HWD,DllStructGetData($bin,1))
FileClose($HWD)

 
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Probleme ecriture 8bits en binaire

#8

Message par jchd »

Argh, tu as parfaitement raison : il y a de nouveau conversion avant écriture.

Il faut donc procéder autrement :

Code : Tout sélectionner

Local $File = "test.txt"
$HWD = FileOpen($File, 16 + 2)
$test = FileWrite($HWD, BinaryMid(Binary(255), 1, 1))
FileClose($HWD)
ConsoleWrite("Longueur du fichier = " & FileGetSize($File) & @LF)
FileDelete($File)
Bon, d'accord, ce n'est pas particulièrement sexy, mais ce n'est pas une opération si courante que ça ; mieux vaut donc un contournement un peu tortueux que pas grand'chose d'autre.

Sinon quand ton fichier tient en mémoire, tu le charges dans une structure d'array of bytes et tu tapes dedans. Ca c'est beaucoup plus courant comme opération.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [..] Probleme ecriture 8bits en binaire

#9

Message par overflow »

j en suis arriver a peu pres a la meme conclusion mais avec juste un dword
je lis mes 4 octet je modif celui que je veut et je ré ecrit
Répondre