Beefy Boxes and Bandwidth Generously Provided by pair Networks RobOMonk
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Hex dump

by kschwab (Priest)
on Sep 10, 2001 at 19:08 UTC ( #111481=snippet: print w/ replies, xml ) Need Help??

Description: subroutine to print a hexdump of a string. I saw some discussion in the CB about needing such a thing.

Update: Also see HexView by OeufMayo.

sub hdump {
    my $offset = 0;
    my(@array,$format);
    foreach my $data (unpack("a16"x(length($_[0])/16)."a*",$_[0])) {
        my($len)=length($data);
        if ($len == 16) {
            @array = unpack('N4', $data);
            $format="0x%08x (%05d)   %08x %08x %08x %08x   %s\n";
        } else {
            @array = unpack('C*', $data);
            $_ = sprintf "%2.2x", $_ for @array;
            push(@array, '  ') while $len++ < 16;
            $format="0x%08x (%05d)" .
               "   %s%s%s%s %s%s%s%s %s%s%s%s %s%s%s%s   %s\n";
        } 
        $data =~ tr/\0-\37\177-\377/./;
        printf $format,$offset,$offset,@array,$data;
        $offset += 16;
    }
}

Update: Fixed the map() in a void context problem. Thanks merlyn. For the curious, it sort of evolved into a void context as I cleaned up the subroutine before posting it to perlmonks.
Comment on Hex dump
Download Code
Re: Hex dump
by merlyn (Sage) on Sep 11, 2001 at 02:01 UTC
    I really dislike the "void map" there, for things like:
    map {$_ = sprintf('%2.2x',$_)} @array;
    What's wrong with simply:
    $_ = sprintf "%2.2x", $_ for @array;
    It even comes in at fewer characters, as well as running faster!

    -- Randal L. Schwartz, Perl hacker

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://111481]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (6)
As of 2014-04-20 10:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (485 votes), past polls