Perl – How to convert a decimal number to a hex string in Perl

hexperlstring

How do I convert a decimal number to a hex string in Perl?

For example, I would like to convert 2001 into "0x07" and "0xD1".

Best Answer

This works for that case:

($x,$y) = map { "0x$_" } 
          sprintf("%04X\n", 2001) =~ /(..)(..)/; 

But I wonder what you're really trying to do. If you're trying to get UTF-16, this isn't the way you want to do that.

If you're trying to figure out the layout of packed binary data, then you should be using unpack. The "C4" format would work for a 4-byte integer.

$int = 2001;
$bint = pack("N", $int);
@octets = unpack("C4", $bint);
printf "%02X " x 4 . "\n", @octets;
# prints: 00 00 07 D1

For some purposes, you can use printf's vector print feature:

printf "%v02X\n", pack("N", 2001);
# prints: 00.00.07.D1

printf "%v02X\n", 255.255.255.240;
# prints: FF.FF.FF.F0