Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
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
Replies are listed 'Best First'.
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 contemplating the Monastery: (5)
As of 2015-08-01 02:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (285 votes), past polls