[R] Ecrire en binaire dans un fichier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
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

[R] Ecrire en binaire dans un fichier

#1

Message par TT22 »

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.
Modifié en dernier par TT22 le mer. 14 déc. 2011 12:25, modifié 1 fois.
Cordialement,
TT22
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Ecrire en binaire dans un fichier

#2

Message par Tlem »

Il faut utiliser une fonction de conversion.
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é".
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: [..] Ecrire en binaire dans un fichier

#3

Message par TT22 »

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.
Cordialement,
TT22
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Ecrire en binaire dans un fichier

#4

Message par sylvanie »

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é :

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.
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: [..] Ecrire en binaire dans un fichier

#5

Message par TT22 »

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 ?
Cordialement,
TT22
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Ecrire en binaire dans un fichier

#6

Message par sylvanie »

1- je pense que vous n'avez pas ouvert le fichier en mode 18 (écriture binaire)
voir exple remodifié :
► Afficher le texte
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)
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Iste
Niveau 11
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

#7

Message par Iste »

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 ?
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.
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
Avatar du membre
mikell
Spammer !
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

#8

Message par mikell »

Iste a écrit : un octet c'est 8 bit, on a pas le choix.
Un octet-bang obligatoire, quoi
:arrow:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
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: [..] Ecrire en binaire dans un fichier

#9

Message par TT22 »

Ok, merci.
Juste une dernière question : comment on fait pour passer de l'écriture hexadécimale à l'écriture binaire ?
Cordialement,
TT22
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Ecrire en binaire dans un fichier

#10

Message par sylvanie »

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.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
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: [..] Ecrire en binaire dans un fichier

#11

Message par TT22 »

Oui, mais comment on fait pour passer d'une écriture hexadécimale à une écriture binaire avec AutoIt ?
Cordialement,
TT22
Avatar du membre
Iste
Niveau 11
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

#12

Message par Iste »

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
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: [..] Ecrire en binaire dans un fichier

#13

Message par TT22 »

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 ?
Cordialement,
TT22
Avatar du membre
Iste
Niveau 11
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

#14

Message par Iste »

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
Signez ici
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Ecrire en binaire dans un fichier

#15

Message par sylvanie »

[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
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
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: [..] Ecrire en binaire dans un fichier

#16

Message par TT22 »

J'ai fait cette petite fonction pour passer du hexa au bit, est-ce que c'est bon ?
► Afficher le texte
Edit : Après quelques test, ça fonctionne.
Je passe en [R] :D
Cordialement,
TT22
Avatar du membre
Tlem
Site Admin
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

#17

Message par Tlem »

Mouais, il y en a qui aime bien refaire les choses. :lol:
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é".
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: [R] Ecrire en binaire dans un fichier

#18

Message par TT22 »

:lol: Effectivement, je n'avais pas vu.
Mais bon, ça me fait un petit entrainement ce qui ne peut que être positif :P
Cordialement,
TT22
Avatar du membre
sylvanie
Niveau 11
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

#19

Message par sylvanie »

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
► Afficher le texte
Mais comme le souligne TT22, l'avantage de vouloir refaire les choses, c'est que ça fait de l'exercice
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Répondre