ASCII <-> Numérico

Tony Rodriguez tony at tony.tzo.com
Wed Jul 19 17:20:29 CDT 2000


Gracias Daniel y Ernesto por sus respuestas. Quede claro!  Fueron de gran ayuda.

Me averguenzo de no haberme imaginado lo del ord() y chr(). Lo que pasa es que
como \### en octal y \x## en hexa sacaba los caracteres, esperaba algo
semejante en decimal.

Otra preguntica...  tengo una tabla HASH y quiero saber si ciertos elementos se
encuentran dentro de la tabla.  Queria usar =~.  Ahora, lo que se me ocurrio
fue formar una sola cadena con los datos del HASH para luego hacer la busqueda,
algo como:

..
...
%colores=Term::ANSIColor::attributes;
$cad="";
while (($nombre,$atributo)=each(%colores))
{
	#Voy a crear una cadena con este HASH
	$cad=$cad." ".$nombre;
}
..
y mas adelante algo como:
..
..
    foreach (@palabras) {
	# @palabras es un array de palabras que quiero saber si se encuentran
	# dentro del HASH
     	$min = lc($_);
	if ( $cad =~ $min ) {$es_o_no="SI";} else {$es_o_no="NO";}
   }

 Luego, la pregunta seria.. Puedo hacerlo directamente con el HASH?

Gracias por todo.

Tony.

> Para convertir de ASCII a decimal y viceversa, utiliza las funciones
> 
> $num  = ord($char);
> $char = chr($num);
> 
> Así,
> 
> #!/usr/bin/perl
> $num = ord("a"); print "$num\n";
> $char = chr(97); print "$char\n";
> 
> Imprime "97" y "a", como es de esperarse.
> 
> ord() y chr() son más rápidas que sprintf()
> 
> Si tienes _muchos_ caracteres para convertir, utilizar un for/foreach con
> ord()/chr() es una solución, pero muy ingenua. Las funciones pack()/unpack()
> son muy poderosas en ese sentido, así:
> 
> #!/usr/bin/perl
> # El $, es el separador al momento de imprimir, obviamente pongo " " para no
> # tener que imprimir los elementos de la lista uno por uno. El $\ es el
> # separador de líneas, obviamente pongo "\n" para no tener que ponerlo al final
> # de cada print. Soy muy flojo y por eso uso eso, pero tuve que poner los
> # comentarios para que se entienda :-) man perlvar
> 
> $, = " ";
> $\ = "\n";
> @ascii = unpack("C*", "Just another Perl hacker!");
> print @ascii;
> $string = pack("C*", @ascii);
> print $string;
> 
> Imprime (en un terminal de 132 columnas :-)
> 
> 74 117 115 116 32 97 110 111 116 104 101 114 32 80 101 114 108 32 104 97 99 107 101 114 33
> Just another Perl hacker!
> -- 
> Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die!
> -----BEGIN GEEK CODE BLOCK-----
> Version: 3.1
> GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V
> PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++
> -----END GEEK CODE BLOCK-----
> 
> ------------------------------------------------------------------------
> Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
> "UNSUBSCRIBE caracas-pm-list" para desuscribirse.
> "INFO caracas-pm-list" para conocer las reglas de etiqueta.
> ------------------------------------------------------------------------
------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list