Domanda

Ho un po 'di numeri rappresentati come stringhe esadecimali nei file di log che vengono analizzati da uno script Perl, e sono relativamente inesperti con Perl.

Alcuni di questi numeri sono effettivamente firmati numeri negativi, cioè quando 0xFFFE == -2 rappresentato come numero intero di 16 bit.

Qualcuno può dirmi il modo canonico di ottenere la rappresentazione firmato di questo numero dal FFFE stringhe in Perl, o in altro punto me un tutorial o altre risorse?

È stato utile?

Soluzione

È possibile utilizzare l'esagono () funzione per convertire da esadecimale a decimale, ma interpreta l'input come un valore senza segno. Per compensare questo, imballare il valore decimale come una quantità senza segno e decomprimerlo come firma uno:

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

La 's' e modelli di 'S' sono per quantità a 16 bit con e senza segno, rispettivamente. per la pack funzione per altri modelli e le informazioni sull'uso, consultare la documentazione.

Altri suggerimenti

print unpack('s>', pack('H4', 'FFFE'));
-2
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top