Możesz użyć pack
do wygenerowania swoich danych binarnych. W przypadku struktur złożonych szczególnie miły jest model Convert::Binary::C.
CBC przetwarza pliki nagłówkowe C (z katalogu lub ze zmiennej w skrypcie). Wykorzystuje informacje z nagłówków do danych binarnych pack
lub unpack
.
Oczywiście, jeśli chcesz używać tego modułu, warto wiedzieć trochę C.
CBC daje możliwość, aby określić endianness i rozmiary dla swoich typów C, a można nawet określić funkcje do konwersji między rodzimymi typami Perla a danymi w pliku binarnym. Użyłem tej funkcji do obsługi kodowania i dekodowania stałych numerów punktów.
za bardzo podstawowy przykład chcesz użyć:
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 nie naprawdę zabłysnąć w tym przykładzie, ponieważ jest po prostu pracować z jednym krótkim int.Jeśli potrzebujesz obsługi skomplikowanych struktur, które mogą mieć typedefs wyciągnięte z kilku różnych nagłówków C, będziesz bardzo szczęśliwy mając to narzędzie pod ręką.
Ponieważ jesteś nowy w Perlu, zasugeruję, aby zawsze use stict
i use warnings
. Ponadto można uzyskać use diagnostics
, aby uzyskać bardziej szczegółowe wyjaśnienia komunikatów o błędach. Zarówno ta strona, jak i Perlmonks mają wiele dobrych informacji dla początkujących i wielu bardzo inteligentnych, wykwalifikowanych ludzi, którzy chętnie Ci pomogą.
BTW, jeśli zdecydujesz się na trasę pack
, sprawdź pack tutorial, pomaga wyjaśnić nieco mistyfikacji dokumentacji pakietu.
Co jest złego w ludziach, że ktoś faktycznie przegłosował to pytanie? –
Myślę, że moja gramatyka nie jest tak dobra i nie jest dobrze zorganizowana. – domlao
+1 do przesunięcia -1, to i jest to Perl. Uczucie subiektywne. : D –