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

StackOverflow https://stackoverflow.com/questions/2111839

  •  22-09-2019
  •  | 
  •  

Вопрос

У меня есть куча чисел, представленных в виде шестнадцатеричных строк в файлах журнала, которые анализируются скриптом 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top