Pergunta

Eu tenho vários números representados como strings hexadecimais em arquivos de log que estão sendo analisados ​​por um script Perl e sou relativamente inexperiente com Perl.

Alguns desses números são, na verdade, números negativos com sinal, ou seja, 0xFFFE == -2 quando representado como um número inteiro com sinal de 16 bits.

Alguém pode me dizer a maneira canônica de obter a representação assinada deste número da string FFFE em Perl ou me indicar um tutorial ou outro recurso?

Foi útil?

Solução

Você pode usar o hexadecimal() função para converter de hexadecimal para decimal, mas interpreta a entrada como um valor sem sinal.Para compensar isso, empacote o valor decimal como uma quantidade não assinada e descompacte-o como uma quantidade assinada:

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

Os modelos 's' e 'S' são para quantidades de 16 bits com e sem sinal, respectivamente.Consulte a documentação do pack função para outros modelos e informações de uso.

Outras dicas

print unpack('s>', pack('H4', 'FFFE'));
-2
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top