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