in reply to Definitive guide to pack/unpack?

i'm trying to use unpack to read what is essentially a memory dump of several c variables, and i think perhaps i've overestimated the power of unpack...how far off am I?
# should unpack to: # an int32 (4 byte) value of -1 # a char (1 byte) value of 'A' # a null-terminated string value of "ANOTHER" # a null-terminated string value of "CSTRING" $packed_string = "\xFF\xFF\xFF\xFF" . "\x41" . "\x41\x4e\x4f\x54\x48\x45\x52\x00" . "\x43\x53\x54\x52\x49\x4e\x47\x00"; # should just be able to plug in some kind of # format for unpack, right? ($int,$char,$another,$cstring) = unpack('',$packed_string );
would i instead have to put together subs like get_int(), get_char(), and get_cstring(), calling each of them in the order needed? if so, could I still use pack to make life easier?

Replies are listed 'Best First'.
Re^2: Definitive guide to pack/unpack?
by BrowserUk (Patriarch) on Apr 10, 2007 at 21:19 UTC

    What problem are you encountering?

    #! perl -slw use strict; # should unpack to: # an int32 (4 byte) value of -1 # a char (1 byte) value of 'A' # a null-terminated string value of "ANOTHER" # a null-terminated string value of "CSTRING" my $packed_string = "\xFF\xFF\xFF\xFF" . "\x41" . "\x41\x4e\x4f\x54\x48\x45\x52\x00" . "\x43\x53\x54\x52\x49\x4e\x47\x00"; # should just be able to plug in some kind of # format for unpack, right? my ($int,$char,$another,$cstring) = unpack('l A1 Z* Z*',$packed_strin +g ); print "int: $int Char:$char String:$another String:$cstring"; __END__ c:\test>junk7 int: -1 Char:A String:ANOTHER String:CSTRING

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.