Re: byte swapping

Top Page

Reply to this message
Author: Habib Bouaziz-Viallet
Date:  
To: Marc TERRIER
CC: guilde
Subject: Re: byte swapping
Je n'ai jamais programmé en Perl. Je vais voir ce que je peux faire avec ce
script et l'adapter à mon besoin. Merci beaucoup Marc !

Le 21/10/06, Marc TERRIER <marc.terrier@???> a écrit :
>
> Habib Bouaziz-Viallet a écrit :
> > Bonjour !
> >
> > Le sujet est dans le titre. Je cherche une méthode simple pour effectuer
> > un byte-swapping d'un fichier hexadecimal.
> >
> > Par exemple :
> >
> > 0x5456
> > 0x6362
> > 0x3231
> > ..... etc.
> >
> > devient :
> >
> > 0x5654
> > 0x6263
> > 0x3132
> > ..... etc.
> >
> > peut-être un shell script ou même un utilitaire standard que je ne
> > connais pas. Merci pour toute aide.
> >
> > --
> > M. Bouaziz-Viallet
>
> Bonjour Habib,
>
> Voici une réponse rapide, mais imparfaite : un petit script Perl qui
> attaque le fichier en binaire, lit deux octets l'un après l'autre, puis
> les recrache sur la sortie standard en les intervertissant :
>
> #!/usr/bin/perl -w
>
> $fichier = "ton_fichier_hexadecimal";
>
> open ( FICHIER, $fichier ) or die "Je ne peux pas ouvrir $fichier : $!";
>
> binmode ( FICHIER );
> binmode ( STDOUT );
>
> while ( read ( FICHIER, $octet_1, 1 ) && read ( FICHIER, $octet_2, 1 ))
> {
>    print STDOUT $octet_2, $octet_1;
> }

>
> close ( FICHIER );
>
> Cette réponse est imparfaite ( très perfectible ), parce que :
>
> 1) Ce script ne gère correctement que les fichiers de taille paire.
> 2) Le nom du fichier à convertir est "buriné" dans le code Perl.
>
> Voici le script en pièce jointe : endian.pl
>
> Je vais essayer d'améliorer un peu, mais si ça peut te dépanner...
>
> --
> Marc TERRIER
> Mail : marc.terrier[at]free.fr
> Site : http://marc.terrier.free.fr
>
>
> #!/usr/bin/perl -w
>
> $fichier = "ton_fichier_hexadecimal";
>
> open ( FICHIER, $fichier ) or die "Je ne peux pas ouvrir $fichier : $!";
>
> binmode ( FICHIER );
> binmode ( STDOUT );
>
> while ( read ( FICHIER, $octet_1, 1 ) && read ( FICHIER, $octet_2, 1 ))
> {
> print STDOUT $octet_2, $octet_1;
> }
>
> close ( FICHIER );
>
>
>



--
M. Bouaziz-Viallet