[R] Ecrire en binaire dans un fichier
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- TT22
- Membre émérite

- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
[R] Ecrire en binaire dans un fichier
Bonjour,
Voilà, cela fait quelques jours que je cherche comment faire, et je ne trouve toujours pas :
Je voudrais écrire en binaire dans un fichier.
Mais, pas en envoyant des caractères comme "0x5374657665204A6F62730D0A313935352D32303131", je voudrais envoyer du vrai binaire dans le fichier comme "0110111011011100000100000010"
L’intérêt, c'est que j'essaye de créer des fichiers avec un langage binaire que j'aurais créé.
Voilà, merci d'avance pour votre aide.
Voilà, cela fait quelques jours que je cherche comment faire, et je ne trouve toujours pas :
Je voudrais écrire en binaire dans un fichier.
Mais, pas en envoyant des caractères comme "0x5374657665204A6F62730D0A313935352D32303131", je voudrais envoyer du vrai binaire dans le fichier comme "0110111011011100000100000010"
L’intérêt, c'est que j'essaye de créer des fichiers avec un langage binaire que j'aurais créé.
Voilà, merci d'avance pour votre aide.
Modifié en dernier par TT22 le mer. 14 déc. 2011 12:25, modifié 1 fois.
Cordialement,
TT22
TT22
- Tlem
- Site Admin

- Messages : 11830
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
Il faut utiliser une fonction de conversion.
En cherchant un peu sur le forum (recherche rapide) vous trouverez votre bonheur.
En cherchant un peu sur le forum (recherche rapide) vous trouverez votre bonheur.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- TT22
- Membre émérite

- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
Si il s'agit de la fonction StringToBinary, ce n'est pas ce qu'il me faut (ou alors je l'ai mal utilisé).
Edit : Parceque je n'ai pas besoin d'envoyer le binaire de "0101" par exemple qui donnerait ceci "0x30313031", j'ai besoins d'envoyer "0101".
Donc, si j'envoie 8 chiffres "01010101" (8bits) mon fichier fera 1 octet. Or, si j'utilise StringToBinary, mon fichier fera 8 octets.
Edit : Parceque je n'ai pas besoin d'envoyer le binaire de "0101" par exemple qui donnerait ceci "0x30313031", j'ai besoins d'envoyer "0101".
Donc, si j'envoie 8 chiffres "01010101" (8bits) mon fichier fera 1 octet. Or, si j'utilise StringToBinary, mon fichier fera 8 octets.
Cordialement,
TT22
TT22
- sylvanie
- Niveau 11

- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
il faut parcourir la chaîne par paquet de 8 caractères (vos pseudo bits) pour reconstituer des vrais octets et après on revient à du binaire.
J'ai ressorti des cartons un vieux convertisseur que j'avais fait il y a 5 ou 6 ans que j'ai réadapté :
J'ai ressorti des cartons un vieux convertisseur que j'avais fait il y a 5 ou 6 ans que j'ai réadapté :
Code : Tout sélectionner
$stringbit="0110111011011100000100000010"
$convertion=convert_bitstring_to_binary($stringbit)
if Not @error Then
ConsoleWrite($convertion&@CRLF)
Else
ConsoleWrite("La donnée n'a pas une longueure multiple de 8 bits"&@CRLF)
EndIf
Func convert_bitstring_to_binary($string)
Local $size=StringLen($string)
Local $substring
Local $ind
Local $str_ret=""
If Not Mod($size,8) Then
SetError(1)
Return -1
EndIf
For $ind=1 To $size step 8
$str_ret&=Hex(_BinToDec(StringMid($string,$ind,8)),2)
Next
SetError(0)
Return Binary("0x"&$str_ret)
EndFunc
Func _BinToDec($i_Bin)
Local $i_End = StringLen($i_Bin)
Local $i_DecOut = 0
Local $i_Count
For $i_Count = 1 To $i_End
Select
Case StringMid($i_Bin, $i_End + 1 - $i_Count, 1) = "1"
$i_DecOut = BitXOR($i_DecOut, BitShift(1, - ($i_Count - 1)))
EndSelect
Next
Return $i_DecOut
EndFunc ;==>_BinToDec
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
- TT22
- Membre émérite

- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
Merci, mais j'ai deux petits problèmes :
1. Je n'arrive pas à écrire le résultat dans un fichier (l’écrire en binaire, lui il m'écrit les caractères
)
2. Et si j'utilise des paquet de 7 caractères ?
1. Je n'arrive pas à écrire le résultat dans un fichier (l’écrire en binaire, lui il m'écrit les caractères
2. Et si j'utilise des paquet de 7 caractères ?
Cordialement,
TT22
TT22
- sylvanie
- Niveau 11

- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
1- je pense que vous n'avez pas ouvert le fichier en mode 18 (écriture binaire)
voir exple remodifié :
2- la donnée de base c'est l'octet = 8 bits donc après à vous de padder avec ce qui vous chante.( les bits 0 semble un choix pertinent)
voir exple remodifié :
► Afficher le texte
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
1. si vous l'ouvrez avec un éditeur de texte, c'est normal, ce dernière va récupérer les bit 8 par 8 et essayer de comprendre en quoi est encodé votre texte.TT22 a écrit :1. Je n'arrive pas à écrire le résultat dans un fichier (l’écrire en binaire, lui il m'écrit les caractères)
2. Et si j'utilise des paquet de 7 caractères ?
Il va "trouver" et afficher le résultat.
Pour la découpe, en AutoIt on vous propose d’écrire des chaines. Chaine faites de char de 8bit. Il faut donc ruser en utilisant une fonction comme celle de sylvanie pour transformer votre suite de 1 et de 0 en chaine de caractère équivalente.
Et vous devrez bien compléter le dernière octet car un octet c'est 8 bit, on a pas le choix.
N'oubliez pas non plus que le binaire est presque toujours traduit en hexa pour etre plus lisible, qui est lui meme traduit en texte par la plupart des outils permettant son affichage
Signez ici
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
Un octet-bang obligatoire, quoiIste a écrit : un octet c'est 8 bit, on a pas le choix.
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- TT22
- Membre émérite

- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
Ok, merci.
Juste une dernière question : comment on fait pour passer de l'écriture hexadécimale à l'écriture binaire ?
Juste une dernière question : comment on fait pour passer de l'écriture hexadécimale à l'écriture binaire ?
Cordialement,
TT22
TT22
- sylvanie
- Niveau 11

- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
Et bien lorsqu'une variable est de type "bynary" (0x5360 par exple) est que le fichier ouvert en écriture est en mode 18 (binary open + write), le fichier obtenu est en binaire, avec 2 octets à savoir 0x53 et 0x60.
Si vous reprenez mon dernier exemple et que vous éditez le fichier sortie en hexa (pspad, Notepad++,.. mais pas Scite) alors vous verrez les octets.
Si vous reprenez mon dernier exemple et que vous éditez le fichier sortie en hexa (pspad, Notepad++,.. mais pas Scite) alors vous verrez les octets.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
- TT22
- Membre émérite

- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
Oui, mais comment on fait pour passer d'une écriture hexadécimale à une écriture binaire avec AutoIt ?
Cordialement,
TT22
TT22
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
Ce que j'ai essayé de vous expliqué c'est que justement, on écrit pas en binaire. Le mieux que l'ont puisse faire, c'est écrire des octets. A vous de les remplir correctement.
Signez ici
- TT22
- Membre émérite

- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
D'accord, mais avec le script de sylvanie, dans le fichier créé il y a bien les bits demandés.
Après, à partir de ce fichier je le lis en mode binaire avec et il me retourne de l’hexadécimal. Or, dans mon script j'ai besoin de traiter du binaire en mode binaire, pas en mode hexadécimal.
Donc, comment peut-on traduire de l'hexadécimal en bits ?
Après, à partir de ce fichier je le lis en mode binaire avec et il me retourne de l’hexadécimal. Or, dans mon script j'ai besoin de traiter du binaire en mode binaire, pas en mode hexadécimal.
Donc, comment peut-on traduire de l'hexadécimal en bits ?
Cordialement,
TT22
TT22
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
char, hexa, int, même les chaines de caractères, tout ca ne sont que des façons de représenter du binaire !!
A vous de convertir l'hexa en bit, si vraiment cela vous est utile.
Vous trouverez bon nombre d'exemple de conversion sur le net, pour vous lancer, sachez que un caractère hexa allant de 0 a F représente 4bit allant de 0000 a 1111
A vous de convertir l'hexa en bit, si vraiment cela vous est utile.
Vous trouverez bon nombre d'exemple de conversion sur le net, pour vous lancer, sachez que un caractère hexa allant de 0 a F représente 4bit allant de 0000 a 1111
Signez ici
- sylvanie
- Niveau 11

- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
[Attention, il y a eu des posts en plus depuis cette rédaction, je repars du poste d4iste concernant le fait qu'on ne peut pas écrire en binaire, du coups il y a peut être du redit]
Cette assertion n'est pas tout à fait vraie au sens où on écrit bien en binaire, mais nous sommes sur des systèmes pour lesquelles l'unité insécable est l'octet.
Maintenant, sur PC, je rejoint parfaite Iste sur le fait qu'on ne peut écrire "bit par bit", on est assujetti à cette unité de base qu'est l'octet.
Pour la dernière question de TT22, je pense qu'il voulait plutôt demander :
comment fait on pour passer d'une string contenant de l'hexa, genre "0x33" à la véritable valeur binaire 0x33.
Si c'est ça, il s'agit de la fonction binary
Je vais la refaire en exemple encore plus détaillé :
$text="0x33", c'est une chaîne de caractères composée de 4 caractères 0,X,3,3
Binary($text) va renvoyer la valeur 0x33 qui constitue un octet de décomposition binaire 110011
Pour aller encore plus loin pour ceux qui ne sont pas familier avec ces concertions, 0x33 (base 16) représenté en base 10, ça fait 3*16^1+3*16^0 = 51
Pour convertir 51 (base 10) en base 2, ça fait 1*2^5 +1*2^4+0*2^3+0*2^2+1*2^1+1*2^0 cad 110011 et en octet ça fait par 00110011
Voilà quitte à avoir défoncé des portes ouvertes (ou pas) j'espère avoir contribué à une meilleur que la compréhension
Cette assertion n'est pas tout à fait vraie au sens où on écrit bien en binaire, mais nous sommes sur des systèmes pour lesquelles l'unité insécable est l'octet.
Maintenant, sur PC, je rejoint parfaite Iste sur le fait qu'on ne peut écrire "bit par bit", on est assujetti à cette unité de base qu'est l'octet.
Pour la dernière question de TT22, je pense qu'il voulait plutôt demander :
comment fait on pour passer d'une string contenant de l'hexa, genre "0x33" à la véritable valeur binaire 0x33.
Si c'est ça, il s'agit de la fonction binary
Je vais la refaire en exemple encore plus détaillé :
$text="0x33", c'est une chaîne de caractères composée de 4 caractères 0,X,3,3
Binary($text) va renvoyer la valeur 0x33 qui constitue un octet de décomposition binaire 110011
Pour aller encore plus loin pour ceux qui ne sont pas familier avec ces concertions, 0x33 (base 16) représenté en base 10, ça fait 3*16^1+3*16^0 = 51
Pour convertir 51 (base 10) en base 2, ça fait 1*2^5 +1*2^4+0*2^3+0*2^2+1*2^1+1*2^0 cad 110011 et en octet ça fait par 00110011
Voilà quitte à avoir défoncé des portes ouvertes (ou pas) j'espère avoir contribué à une meilleur que la compréhension
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
- TT22
- Membre émérite

- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Ecrire en binaire dans un fichier
J'ai fait cette petite fonction pour passer du hexa au bit, est-ce que c'est bon ?
Edit : Après quelques test, ça fonctionne.
Je passe en [R]
► Afficher le texte
Je passe en [R]
Cordialement,
TT22
TT22
- Tlem
- Site Admin

- Messages : 11830
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [R] Ecrire en binaire dans un fichier
Mouais, il y en a qui aime bien refaire les choses.
http://www.autoitscript.fr/forum/viewto ... f=6&t=8342
http://www.autoitscript.fr/forum/viewto ... f=6&t=8342
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- TT22
- Membre émérite

- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [R] Ecrire en binaire dans un fichier
Mais bon, ça me fait un petit entrainement ce qui ne peut que être positif
Cordialement,
TT22
TT22
- sylvanie
- Niveau 11

- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [R] Ecrire en binaire dans un fichier
mouais aussi, car la 2eme solution donnée en lien et comment dire...,
j'adore le concept du plantage de carottes à base de TNT, buldozzer + camion avec creusement de carrière à ciel ouvert ...
on va reprendre les bases : pour savoir si une valeur se termine par "1" dans sa représentation binaire :
BitAnd($val,1)
puis on fait un bitshit de 1 pour dégager le bit traîté, du coups le bit suivant passe en dernière position à son tour et on recommence jusqu'à ce que la valeur étudiée soit nulle
coût moyen par octet : 8 boucles en moyenne avec un et bit à bit et un décalage.
Le seul appel à une fonction de type stringxxx est unt stringright pour les astuces de padding
Mais comme le souligne TT22, l'avantage de vouloir refaire les choses, c'est que ça fait de l'exercice
j'adore le concept du plantage de carottes à base de TNT, buldozzer + camion avec creusement de carrière à ciel ouvert ...
on va reprendre les bases : pour savoir si une valeur se termine par "1" dans sa représentation binaire :
BitAnd($val,1)
puis on fait un bitshit de 1 pour dégager le bit traîté, du coups le bit suivant passe en dernière position à son tour et on recommence jusqu'à ce que la valeur étudiée soit nulle
coût moyen par octet : 8 boucles en moyenne avec un et bit à bit et un décalage.
Le seul appel à une fonction de type stringxxx est unt stringright pour les astuces de padding
► Afficher le texte
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
