Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

HexView

by OeufMayo (Curate)
on Dec 12, 2000 at 04:17 UTC ( #46188=sourcecode: print w/ replies, xml ) Need Help??

Category: Utility Script
Author/Contact Info OeufMayo
Description:

A nice and simple Hexadecimal viewer module, using the Perl format functions.

One cool use in a on-liner:

perl -MHexView -e "HexView(\*STDIN)" < some_file

you can also use it like this:

HexView($any_scalar);
HexView(@some_array);
HexView(\*FH_REF);
package HexView;
use strict;
use warnings;

BEGIN {
    use Exporter ();
    our ($VERSION, @ISA, @EXPORT);
    $VERSION = 0.01;
    @ISA = qw(Exporter);
    @EXPORT = qw(&HexView);
}

sub HexView {
    my $data = shift;
    # If a filehandle  ref was an arg we convert
    # it to an array (in a rather ugly fashion)
     if (ref($data) eq 'GLOB') {
            @_ = <$data>;
            undef $data;    # clean the 'GLOB(0x123456)'
    }
    while (@_){$data .= shift}

    my ($hex, $char);
    foreach (split (//,$data)){
        $hex  .= sprintf('%02X ', ord($_));
        $char .= ord($_) > 13 ? $_ : ".";
    }

local $: = ''; # a.k.a $FORMAT_LINE_BREAK_CHARACTERS (and we don't wan
+t that)
my $formathead =<<"HEAD";
format =
+--------------------------------------------------+------------------
++
| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  | 0123456789ABCDEF 
+|
+--------------------------------------------------+------------------
++
HEAD
my $formatline = <<'LINE';
| ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | ^<<<<<<<<<<<<<<< 
+|
 $hex,                                             $char,
LINE
my $formatend = <<'END';
+--------------------------------------------------+------------------
++
.
END
eval($formathead . $formatline x (int(length($data)/16)+1) . $formaten
+d);
write;
return 1;
}

1;

Comment on HexView
Download Code
Re: HexView
by Anonymous Monk on Nov 17, 2012 at 18:43 UTC
    Package above does not work in threaded scripts probably due to usage of eval. I have made a simpler version of the same package. See below:
    #!/usr/bin/perl -w # (c) Saulius Petrauskas 2012 # Lentele atspausdina duomenis is eilutes. package HexPrint; use strict; BEGIN { use Exporter (); our ($VERSION, @ISA, @EXPORT); $VERSION = 0.01; @ISA = qw(Exporter); @EXPORT = qw(&HexPrint); } sub HexPrint { my $str = shift; my $i = 0; my $s = ''; print " +--------------------------------------------------+------------------ ++ | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0123456789ABCDEF +| +--------------------------------------------------+------------------ ++ | "; $str =~ s/(.)/printf("%02X ",ord($1));$s.=$1;if($i++>14){$s=~s|[^ +-~]|.|g;print " | $s |\n| ";$s='';$i=0;}/gse; if($i > 0) { # print tail $s=~s|[^ -~]|.|g; print " "x(16-$i) . " | $s" . " "x(16-$i) . " |\n"; } print "+--------------------------------------------------+----------- +-------+\n"; } 1;

Back to Code Catacombs

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (8)
As of 2014-12-20 16:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (96 votes), past polls