Mam strukturę, która zawiera:
struct mystruct{
int id[10];
char text[40];
unsigned short int len;
};
I próbuję rozpakować go w jednym wierszu, coś takiego:
my(@ids,$text,$length) = unpack("N10C40n",$buff) ;
Ale wszystko idzie do pierwszej tablicy (@ids), próbowałem szablonów jako "N10 C40 n
" i "(N10)(C40)(n)
" Tak więc albo nie można tego zrobić, albo nie używam właściwego ciągu szablonów.
Uwaga: Używam dużych danych endian.
Jakieś wskazówki?
Odpowiedzi:
7 dla odpowiedzi № 1Przy przypisaniu listy pierwsza tablica lub hash będą jeść wszystko (skąd będzie wiedzieć, gdzie się zatrzymać?). Spróbuj zamiast tego:
my @unpacked = unpack "N10Z40n", $buff;
my @ids = @unpacked[0 .. 9];
my ($text, $length) = @unpacked[10, 11];
możesz również powiedzieć
my @ids;
(@ids[0 .. 9], my ($text, $length)) = unpack "N10Z40n", $buff;
1 dla odpowiedzi nr 2
Jeśli kolejność @ids
nie ma znaczenia:
my ($length, $text, @ids) = reverse unpack("N10C40n",$buff) ;