Vous pouvez utiliser pack
pour générer vos données binaires. Pour les structures complexes, Convert::Binary::C est particulièrement agréable. CBC analyse les fichiers d'en-tête C (provenant d'un répertoire ou d'une variable de votre script). Il utilise les informations des en-têtes à pack
ou unpack
des données binaires.
Bien sûr, si vous voulez utiliser ce module, il est utile de connaître quelques C.
CBC vous donne la possibilité de spécifier le boutisme et tailles pour vos types C, et vous pouvez même spécifier des fonctions pour convertir entre les types Perl natifs et les données dans le fichier binaire. J'ai utilisé cette fonctionnalité pour gérer l'encodage et le décodage des nombres à virgule fixe.
Pour votre exemple de base que vous utiliseriez:
use strict;
use warnings;
use IO::File;
use Convert::Binary::C;
my $c = Convert::Binary::C->new('ByteOrder' => 'LittleEndian');
my $packed = $c->pack('short int', 0xFF);
print $packed;
my $fh = IO::File->new('outfile', '>')
or die "Unable to open outfile - $!\n";
$fh->binmode;
$fh->print($packed);
CBC n'a pas vraiment de briller dans cet exemple, car il est juste de travailler avec un short int.Si vous avez besoin de gérer des structures complexes qui peuvent avoir des typedefs tirés de plusieurs en-têtes C différents, vous serez très heureux d'avoir cet outil à portée de main. Comme vous êtes nouveau à Perl, je vais vous suggérer toujours use stict
et use warnings
. En outre, vous pouvez use diagnostics
pour obtenir des explications plus détaillées sur les messages d'erreur. Ce site et Perlmonks ont beaucoup de bonnes informations pour les débutants et beaucoup de gens très intelligents et qualifiés prêts à vous aider.
BTW, si vous décidez d'aller le pack
route, consultez le pack tutorial, il permet de clarifier la documentation de l'emballage quelque peu mystificateur.
Qu'est-ce qui ne va pas chez vous si quelqu'un a réellement rejeté cette question? –
Je pense que ma grammaire n'est pas très bonne et pas bien structurée. – domlao
+1 pour compenser -1, ça et c'est Perl. Se sentir subjectif. : D –