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ď č. 1Môž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