Note that pack/unpack were not useful in converting from hex to decimal (unlike most people seem to think) but were used here to convert from unsiged to signed-short.
Also, sprintf isn't useful for converting from hex to decimal but is the proper choice for going the other direction.
Update: Ah, thanks merlyn; I didn't think of that way to use pack/unpack to convert hex to decimal. To convert without having to worry about little-/big-endian issues gets rather complicated when using pack/unpack and signed values:
my $hex= "FFAA";
my $signed= unpack "s", pack "S", unpack "v", pack "H*", $hex;
and it gets even more complicated if you want to handle different numbers of hex digits:
my $hex= "ABC";
my $unsigned= unpack "V", pack "h*", "".reverse "00000000".$hex;
my $signed= unpack "l", pack "L", unpack "V", pack "h*",
"".reverse( ( $hex=~/^[89a-f]/i ? "F" : "0" ) x 8 . $hex );
-
tye
(but my friends call me "Tye")