У мене є купа чисел, представлених у вигляді шістнадцяткових рядків у файлах журналів, які розбираються сценарієм Perl, і я відносно недосвідчений Perl.
Деякі з цих цифр фактично підписані негативними числами, тобто 0xFFFE == -2
коли він представлений у вигляді 16-розрядного цілого числа.
Може хто-небудь, будь ласка, скажіть мені канонічний спосіб отримання підписаного представлення цього номера з рядка FFFE
в Perl, або іншим чином вказати на навчальний посібник чи інший ресурс?
Відповіді:
20 за відповідь № 1Ви можете скористатись hex () функція для перетворення з шістнадцяткового до десяткового, але вона інтерпретує введення як непідписане значення. Щоб компенсувати це, візьміть десяткове значення як непідписану кількість та розпакуйте його як підписаний:
my $num = unpack("s", pack("S", hex("FFFE")));
Шаблони "s" та "S" призначені для підписаних та непідписаних 16-бітових значень, відповідно. Дивіться документацію для pack
функція для інших шаблонів та інформація про використання.
1 для відповіді № 2
print unpack("s>", pack("H4", "FFFE"));
-2