Sie können verwenden pack
um Ihre binären Daten zu erzeugen. Für komplexe Strukturen, Umwandeln::Binär::C ist besonders schön.
CBC parst C-Header-Dateien (entweder aus einem Verzeichnis oder aus einer Variable in Ihrem Skript). Es verwendet die Informationen aus den Headern, um pack
o unpack
binäre Daten.
Wenn Sie dieses Modul verwenden wollen, sind natürlich C-Kenntnisse hilfreich.
CBC gibt Ihnen die Möglichkeit, die Endianness und Größen für Ihre C-Typen festzulegen, und Sie können sogar Funktionen zur Konvertierung zwischen nativen Perl-Typen und den Daten in der Binärdatei angeben. Ich habe diese Funktion für die Kodierung und Dekodierung von Festkommazahlen verwendet.
Für Ihr sehr einfaches Beispiel würden Sie verwenden:
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 kommt in diesem Beispiel nicht wirklich zur Geltung, da es nur mit einem einzigen kurzen int arbeitet. Wenn Sie mit komplexen Strukturen arbeiten müssen, deren Typendefinitionen aus mehreren verschiedenen C-Headern stammen, werden Sie froh sein, dieses Werkzeug zur Hand zu haben.
Da Sie neu in Perl sind, schlage ich vor, dass Sie immer use stict
et use warnings
. Außerdem können Sie use diagnostics
um genauere Erklärungen zu Fehlermeldungen zu erhalten. Sowohl diese Website als auch Perlmonke haben viele gute Informationen für Anfänger und viele sehr kluge, erfahrene Leute, die bereit sind, Ihnen zu helfen.
Übrigens, wenn Sie sich für den Weg der pack
Route, sehen Sie sich die Anleitung zum Packen Es hilft, die etwas rätselhafte Packungsdokumentation zu verstehen.
0 Stimmen
Ich denke, der wichtigste Hinweis ist der Satz in perldoc von print : Druckt eine Zeichenkette oder eine Liste von Zeichenketten. ... und nicht Zahlen . Ich bin auch schon in diese Falle getappt.