/ / Перетворення шістнадцяткових чисел у рядках до негативних чисел у Perl-perl, синтаксичний аналіз, цифри, підписані

Перетворення шістнадцяткових чисел у рядках до негативних чисел у Perl-Perl, синтаксичний аналіз, цифри, підписані

У мене є купа чисел, представлених у вигляді шістнадцяткових рядків у файлах журналів, які розбираються сценарієм 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