Question

J'ai un tas de chiffres représentés sous forme de chaînes hexadécimaux dans les fichiers journaux qui sont en cours d'analyse par un script Perl, et je suis relativement peu d'expérience avec Perl.

Certains de ces numéros sont effectivement signé des nombres négatifs, à savoir 0xFFFE == -2 lorsqu'il est représenté comme un nombre entier signé 16 bits.

Quelqu'un peut-il s'il vous plaît me dire la manière canonique d'obtenir la représentation signée de ce numéro de la FFFE chaîne en Perl, ou me diriger autrement à un tutoriel ou une autre ressource?

Était-ce utile?

La solution

Vous pouvez utiliser l'hexagone () fonction pour convertir hexadécimal en décimal, mais il interprète l'entrée en tant que valeur non signée. Pour compenser cela, emballer la valeur décimale comme une quantité non signée et décompressez comme signé un:

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

Le « s » et des modèles « S » sont signés et non signés pour des quantités de 16 bits, respectivement. Consultez la documentation de la fonction pack pour d'autres modèles et informations d'utilisation.

Autres conseils

print unpack('s>', pack('H4', 'FFFE'));
-2
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top