in reply to Re^4: Decoding binary information
in thread Decoding binary information
If you need to convert to negative values, I think bart's suggestion below (the second one) is the best (most simple). Just subtract 2 ** 24 from any values which are greater than or equal to 0x800000 (2 ** 23).
That would amend my original code to something like:
use strict; use warnings; my @values = ( "05F9AD", "F4EC9E", "0005" ); foreach my $value (@values) { my $decval = hex($value); ($decval >= 0x800000) and $decval -= 0x1000000; printf "Hex value 0x%08lx = %ld (decimal)\n", $decval, $decval; } __END__ # Output: Hex value 0x0005f9ad = 391597 (decimal) Hex value 0xfff4ec9e = -725858 (decimal) Hex value 0x00000005 = 5 (decimal)
|
|---|