У меня есть набор чисел, представленных как шестнадцатеричные строки в файлах журнала, которые анализируются сценарием Perl, и я относительно неопытен с Perl.
Некоторые из этих чисел являются на самом деле подписанными отрицательными числами, т.е. 0xFFFE == -2
при представлении как 16-разрядное целое число со знаком.
Может кто-то говорить мне канонический способ получить представление со знаком этого числа от строки FFFE
в Perl, или иначе указывают на меня на учебное руководство или другой ресурс?
Вы можете использовать функцию Hex () , для преобразования из шестнадцатеричных данных до десятичной, но он интерпретирует вход как значение без знака. Чтобы компенсировать это, упаковывайте десятичное значение в качестве количества без знака и распакуйте его в качестве подписанного:
my $num = unpack('s', pack('S', hex('FFFE')));
Шаблоны «S» и «S» предназначены для подписанных и неподписанных 16-битных величин, соответственно. См. Документацию для функции Pack
для других шаблонов и информации об использовании.