> V An unsigned long (32-bit) in "VAX" (little-endian) order.
Have you noticed the pattern?
bytes chars 36353935 ----> 36 35 39 35 ----> 6 5 9 5 | | | | first 4 digits reverse | | | | 595661 -------------> 5956 ------> 6 5 9 5
It works for any input greater or equal to 1000:
#! /usr/bin/perl use warnings; use strict; use Test::More; sub what { my ($input) = @_; my $unpacked = unpack "V", $input; my $result = join "", map chr hex, sprintf("%x\n", $unpacked) =~ / +(..)/g; is $result, reverse substr $input, 0, 4; } what($_) for 1000 .. 2000, 2e4, 3e5, 4e6, 5e7, 6e8, 7e9, 8e10, 9e11, 2 ** 64 - 3; done_testing();
Update: For numbers fitting into integer, you can also use
reverse($input) % 10_000
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
In reply to Re: Understanding Unpack on Decimal Value
by choroba
in thread Understanding Unpack on Decimal Value
by arblargan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |