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 );