¿Cómo convertir una cadena que incluye hexadecimal a hexadecimal en Perl?

Por ejemplo, tengo una cuerda "\x80\x81\x82.abc\x00", entonces debe convertirse a hexadecimal 8081822e61626300. ¿Puedo preguntar cómo hacerlo en Perl?

preguntado el 04 de julio de 12 a las 10:07

¿Tu código es como qué? Edita tu pregunta para poner el código. (Ver Preguntas Frecuentes). -

2 Respuestas

tienes cuerda "\x80\x81\x82.abc\x00" or '\x80\x81\x82.abc\x00'?

Opción 1

my $text = "\x80\x81\x82.abc\x00";
$text = unpack "H*", $text;
print $text;

Opción 2

my $text = '\x80\x81\x82.abc\x00';
$text =~ s/\\x([a-zA-Z\d]{2})/{chr hex $1}/ge;
$text = unpack "H*", $text;
print $text;

Respondido 04 Jul 12, 13:07

unpack 'H*' es probablemente la mejor solución:

$ perlsh
eval: unpack "H*", "\x80\x81\x82.abc\x00"
'8081822e61626300'

Respondido 04 Jul 12, 10:07

Sí, si ingresa directamente la cadena en el desempaquetado, obtendrá el resultado correcto, pero en mi aquí, uso var, como $cadena = "\x80\x81\x82.abc\x00", entonces la salida es no es correcto, convirtió un solo carácter (como "\", "x", "8","0") en hexadecimal, no "\x80", eso es lo que esperaba. - chao

@chao: Vea la respuesta de @Ωmega. Tiene las dos posibilidades. Hay una diferencia entre " y ' en Perl. " se convierte \x80 en hexadecimal mientras ' lo deja como una cadena. - Simbabque

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.