Преобразование шестнадцатеричных чисел в строках к отрицательным числам, в Perl

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

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

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

11
задан Sinan Ünür 19 March 2016 в 12:39
поделиться

1 ответ

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

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

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

21
ответ дан 3 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: