Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
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 wandering the Monastery: (11)
As of 2014-08-20 08:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (108 votes), past polls