embedded embedded - 5 months ago 7
Perl Question

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

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".

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
Comments