Это работает для этого случая:
($x,$y) = map { "0x$_" }
sprintf("%04X\n", 2001) =~ /(..)(..)/;
Но мне интересно, что вы действительно пытаетесь сделать.Если вы пытаетесь получить UTF-16, это не тот способ, которым вы хотите это сделать.
Если вы пытаетесь выяснить расположение упакованных двоичных данных, то вам следует использовать unpack
.Формат "C4" будет работать для 4-байтового целого числа.
$int = 2001;
$bint = pack("N", $int);
@octets = unpack("C4", $bint);
printf "%02X " x 4 . "\n", @octets;
# prints: 00 00 07 D1
Для некоторых целей вы можете использовать векторную печать printf
:
printf "%v02X\n", pack("N", 2001);
# prints: 00.00.07.D1
printf "%v02X\n", 255.255.255.240;
# prints: FF.FF.FF.F0