Pregunta

Tengo un montón de números representados como cadenas hexadecimales en los archivos de registro que se está analizando por un script Perl, y estoy relativamente poca experiencia con Perl.

Algunos de estos números son en realidad firmaron números negativos, es decir 0xFFFE == -2 cuando se representa como un entero con signo de 16 bits.

Puede alguien por favor dígame la forma canónica de conseguir la representación firmada de este número de la cadena FFFE en Perl, o de lo contrario me punto a un tutorial o algún otro recurso?

¿Fue útil?

Solución

Puede utilizar el hexagonal () función para convertir de hexadecimal a decimal, pero interpreta la entrada como un valor sin signo. Para compensar esto, el paquete del valor decimal como una cantidad sin signo y descomprimirlo como uno firmado:

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

La 's' y 'S' plantillas son para cantidades de 16 bits con y sin signo, respectivamente. Consulte la documentación de la función pack para otras plantillas y la información de uso.

Otros consejos

print unpack('s>', pack('H4', 'FFFE'));
-2
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top