Преобразование шестнадцатеричных чисел в строках в отрицательные числа в Perl - PullRequest
11 голосов
/ 21 января 2010

У меня есть набор чисел, представленных в виде шестнадцатеричных строк в файлах журнала, которые анализируются скриптом Perl, и я относительно неопытен в Perl.

Некоторые из этих чисел на самом деле являются отрицательными числами со знаком, т. Е. 0xFFFE == -2 при представлении в виде 16-разрядного целого числа со знаком.

Может кто-нибудь сказать мне канонический способ получения подписанного представления этого числа из строки FFFE в Perl, или иным образом указать мне учебник или другой ресурс?

Ответы [ 2 ]

21 голосов
/ 21 января 2010

Вы можете использовать функцию hex () для преобразования из шестнадцатеричного в десятичное, но она интерпретирует входные данные как значение без знака. Чтобы компенсировать это, упакуйте десятичное значение как число без знака и распакуйте его как число со знаком:

my $num = unpack('s', pack('S', hex('FFFE')));

Шаблоны 's' и 'S' предназначены для 16-битных величин со знаком и без знака соответственно. См. Документацию для функции pack для получения других шаблонов и информации об использовании.

1 голос
/ 25 апреля 2012
print unpack('s>', pack('H4', 'FFFE'));
-2
...