Re: byte swapping

Top Page

Reply to this message
Author: Marc TERRIER
Date:  
To: Habib Bouaziz-Viallet
CC: guilde
Subject: Re: byte swapping
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 );