/ / Konverzia hexadecimálnych čísel v reťazcoch na záporné čísla, Perl - perl, parsovanie, čísla, podpísané

Konverzia hexadecimálnych čísel v reťazcoch na záporné čísla, Perl - perl, parsovanie, čísla, podpísané

Mám veľa súborov reprezentovaných ako hexadecimálne reťazce v súboroch denníka, ktoré sú analyzované skriptom Perl a ja som relatívne neskúsený s Perl.

Niektoré z týchto čísel sú skutočne podpísané záporné čísla, t. 0xFFFE == -2 keď je zobrazené ako 16-bitové podpísané celé číslo.

Môže mi niekto povedať kanonický spôsob získania podpísaného zastúpenia tohto čísla z reťazca FFFE v Perl, alebo iným spôsobom ma na tutoriál alebo iný zdroj?

odpovede:

20 pre odpoveď č. 1

Môžete použiť hex () funkcia na konverziu z hexadecimálnej na desiatkovú, ale interpretuje vstup ako nepodpísanú hodnotu. Aby ste to kompenzovali, vložte desiatkovú hodnotu ako nepodpísané množstvo a rozbaľte ju ako podpísanú:

my $num = unpack("s", pack("S", hex("FFFE")));

Šablóny "s" a "S" sú pre podpísané a nepodpísané 16-bitové veličiny. Pozrite si dokumentáciu pre pack funkcia pre iné šablóny a informácie o používaní.


1 pre odpoveď č. 2
print unpack("s>", pack("H4", "FFFE"));
-2