Frage

Ich habe eine Reihe von Zahlen als hexadezimale Zeichenkette in Protokolldateien dargestellt, die von einem Perl-Skript analysiert werden, und ich bin relativ unerfahren mit Perl.

Einige dieser Zahlen werden tatsächlich negativen Zahlen mit Vorzeichen, d.h. 0xFFFE == -2 wenn sie als 16-Bit-Ganzzahl mit Vorzeichen repräsentiert.

Kann jemand bitte sagen Sie mir die kanonische Weise die signierte Darstellung dieser Zahl aus dem String FFFE in Perl zu bekommen, oder auf andere Weise zeigen Sie mir ein Tutorial oder eine andere Ressource?

War es hilfreich?

Lösung

Sie können mit der hex () Funktion convert von hexadezimal dezimal, aber er interpretiert die Eingabe als ein Wert ohne Vorzeichen. Um das zu kompensieren, packen den Dezimalwert als unsigned Menge und entpacken Sie es als eine unterzeichneten:

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

Die ‚s‘ und ‚S‘ Vorlagen sind für signierte und unsignierte 16-Bit-Mengen sind. Lesen Sie die Dokumentation für die pack Funktion für andere Vorlagen und Anwendungsinformationen.

Andere Tipps

print unpack('s>', pack('H4', 'FFFE'));
-2
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top