Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

hexdump2bin: convert hexdump -C like output back to binary

by dmitri (Priest)
on Jun 19, 2013 at 02:02 UTC ( #1039708=CUFP: print w/replies, xml ) Need Help??

#!/usr/bin/perl # Convert hexdump -C like output back to binary. Supports * lines, wh +ich # xxd -r does not (this is the reason for this script). Assumes good +input. use strict; use warnings; my ($off, $line, $asterisk); while (<>) { if (/^([[:xdigit:]]{2,}0)\s+((?:[[:xdigit:]]{2}\s+){1,16})/) { if (defined($asterisk)) { my $nlines = (hex($1) - hex($off)) / 16 - 1; print map { chr hex } split /\s+/, $line x $nlines; undef $asterisk; } print map { chr hex } split /\s+/, $2; $off = $1, $line = $2; } elsif (/^\*/) { $asterisk = 1; } else { last; } }

Replies are listed 'Best First'.
Re: hexdump2bin: convert hexdump -C like output back to binary
by Anonymous Monk on Oct 07, 2014 at 10:57 UTC
    When I try on a large 'hexdump -C' output with many '*' lines covering large offsets it fails "Out of memory!". I am not a perl expert. Can this be fixed?

      Most likely this line:

      print map { chr hex } split /\s+/, $line x $nlines;

      is problematic as it constructs a string of $nlines * length($nlines) bytes in memory before splitting and then printing it.

      The most likely approach to fix this would be to convert the statement to a loop:

      for my $repeat (1..$nlines) { print map { chr hex } split /\s+/, $line; }

      I haven't tested this change, so you're advised to compare the results of the changed file to the results without the change before trusting the output.

      Personally, I wonder how large your input hexdump and your output hexdump files are. Perl usually can handle strings up to 2GB without any problem, so likely your machine has less RAM than that.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: CUFP [id://1039708]
Approved by bulk88
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2018-06-22 11:38 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (124 votes). Check out past polls.