embedded
embedded

Reputation: 729

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

Upvotes: 3

Views: 15793

Answers (2)

tchrist
tchrist

Reputation: 80384

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

Upvotes: 5

Marcelo Cantos
Marcelo Cantos

Reputation: 185852

I'm not sure what exact format you want it in, but one way to convert to hex is:

sprintf("%x", 2001)

Upvotes: 1

Related Questions