È possibile utilizzare pack
per generare i dati binari. Per le strutture complesse, Convert::Binary::C è particolarmente bello.
CBC analizza i file di intestazione C (da una directory o da una variabile nello script). Utilizza le informazioni dalle intestazioni ai dati binari pack
o unpack
.
Naturalmente, se si desidera utilizzare questo modulo, è utile conoscere un po 'di C.
CBC ti dà la possibilità di specificare l'endianness e formati per i tipi di C, e si può anche specificare le funzioni per la conversione tra tipi nativi di Perl e i dati nel file binario. Ho usato questa funzione per gestire la codifica e la decodifica dei numeri a virgola fissa.
Per esempio molto semplice devi usare:
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 in realtà non arriva a brillare in questo esempio, dal momento che è solo lavorando con un unico short int.Se hai bisogno di gestire strutture complesse che potrebbero avere typedefs estratti da diverse intestazioni C diverse, sarai molto felice di avere questo strumento a portata di mano.
Dato che sei nuovo in Perl, ti suggerisco di sempre use stict
e use warnings
. Inoltre, è possibile use diagnostics
per ottenere spiegazioni più dettagliate per i messaggi di errore. Sia questo sito che lo Perlmonks hanno molte buone informazioni per i principianti e molte persone molto intelligenti e competenti che desiderano aiutarvi.
BTW, se si decide di percorrere il percorso pack
, controllare lo pack tutorial, aiuta a chiarire la documentazione del pacchetto un po 'mistificante.
Cosa c'è di sbagliato in voi persone che qualcuno abbia effettivamente votato questa domanda? –
Penso che la mia grammatica non sia buona e non ben strutturata. – domlao
+1 per offset -1, quello ed è Perl. Sensazione soggettiva. : D –