Как мне преобразовать десятичное число в шестнадцатеричную строку в Perl? - PullRequest
2 голосов
/ 28 октября 2010

Как мне преобразовать десятичное число в шестнадцатеричную строку в Perl?

Например, я хотел бы преобразовать 2001 в "0x07" и "0xD1".

Ответы [ 2 ]

5 голосов
/ 28 октября 2010

Это работает для этого случая:

($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
1 голос
/ 28 октября 2010

Я не уверен, в каком именно формате вы хотите его использовать, но один из способов преобразования в шестнадцатеричный формат:

sprintf("%x", 2001)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...