The following code takes these steps:
- Unpack two four-character strings while discarding a character in the middle. These strings will represent two hex sequences.
- Pack the two hex strings.
- Unpack the packed string as two network-endian unsigned shorts.
- Generate a range from the low integral value to the high integral value.
- Pack all of the integral elements of that range.
- Unpack them as a series of hex strings.
- Print them.
my $string = "293F:2945";
my ( $low, $high ) = unpack( 'nn', pack( 'H4H4', unpack( 'A4xA4', $str
+ing ) ) );
print "$_ " for unpack( '(H4)*', pack( 'n*', $low .. $high ) );
The output:
293f 2940 2941 2942 2943 2944 2945
Let's put it in a (debatably) well-named subroutine so we remember what this gem does:
sub enum_hex_range_from_string {
my ( $low, $high )
= unpack( 'nn', pack( 'H4H4', unpack( 'A4xA4', $string ) ) );
return unpack( '(H4)*', pack( 'n*', $low .. $high ) );
}
Just add some camel casing randomly through the subroutine name and it would feel right at home in a PHP application.
The hardest part of coming up with something like this is keeping track of which of the many pack/unpack template tokens to use from [Hh] and [SsNnVv]. I have to admit to needing to experiment with a couple of one-liners to make sure my conversions were going the right direction.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.