Well, the $ctr = 0 doesn't do anything useful, and the $ctr += 1 could be merged into the if conditional.
my @converted_list = map { sprintf('0x%04x', $_) } unpack('v*', $line) +; my $ctr; foreach (@converted_list) { print OUTFILE "$_, "; print OUTFILE "\n" unless ++$ctr % 8; }
You could merge of all that together if you so desired, but that's probably a bit odd.
my $ctr; print map { ++$ctr % 8 ? "$_, " : "$_\n" } map { sprintf('0x%04x', $_) } unpack('v*', $line);
The simplest solution is probably to omit the counter altogether by only reading in 16 bytes at a time. As a bonus, it doesn't leave trailing comma when the file isn't an exact multiple of 16 bytes long.
# Each line has 8 16-bit words, so 16 bytes. local $/ = \16; while (<INFILE>) { print join ', ', map { sprintf('0x%04x', $_) } unpack('v*', $_); print("\n"); }
In reply to Re^3: Convert binary file to ascii
by ikegami
in thread Convert binary file to ascii
by richz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |