• Publicidad

Convertir String a ASCII

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Convertir String a ASCII

Notapor Rene Serrano » 2006-12-11 18:02 @793

Hola nuevamente. Sólo con una pregunta sencilla pero que no he podido hacerla andar. El problema es el siguiente:

Tengo una cadena cualquiera. Ejemplo 123456. Necesito sacar el Ascii de cada valor pero no encuentro la forma de combinar las expresiones regulares con la función ord(). No sé si me puedan echar una mano o me dan otra idea.

En teoría la variable me quedaría de esta manera: 123456=495051525354.

A ver si me ayudan.

Gracias

--------------
Rene Serrano
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2006-11-27 12:35 @565
Ubicación: El salvador CA

Publicidad

Notapor explorer » 2006-12-11 18:41 @820

Una solución sencilla:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
$x = "123456";
$y = "";
for ( $i = 0; $i < length($x); $i++ ) {
  $y = $y . ord( substr( $x, $i, 1 ) );
}
print "$x=$y\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Lo que hacemos es recorrer, uno a uno, todos los caracteres de $x, el primer string, y agregando la salida de ord() en la variable $y, que hace de acumulador.

Con expresiones regulares queda un poco más corto, pero el trabajo es casi el mismo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$x = "123456";
$x_viejo = $x;
$x =~ s/(.)/ord($1)/ge;
print "$x_viejo=$x";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Necesitamos guardar el valor anterior de $x, ya que va a ser modificado. En la expresión regular buscamos un sólo carácter cada vez (.) y nos quedamos con él (()). Para ese carácter, lo sustituimos por el valor ord(). Como es la ejecución de un operador, ponemos el modificador /e y como queremos repetir esto para todos los caracteres disponibles, ponemos el /g.

Esta otra forma usa el desempaquetado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$x = "123456";
$y = join("", unpack("c*",$x));
print "$x=$y\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
A unpack le decimos que le vamos a pasar una ristra de bytes y queremos que nos la convierta en los valores decimales que representan. El join unirá todos esos valores en un único escalar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Rene Serrano » 2006-12-12 09:15 @427

Gracias, ¡¡¡¡Como siempre con excelentes soluciones !!!!


-------------------
|23N3.
Rene Serrano
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2006-11-27 12:35 @565
Ubicación: El salvador CA


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 20 invitados

cron