ASCII <-> Numérico

Ernesto Hernández-Novich emhn at telcel.net.ve
Wed Jul 19 15:28:26 CDT 2000


On Wed, 19 Jul 2000, you wrote:
> > Ultimo puntico.  Como hago para sacar un caracter de la tabla ASCII con numeros
> > decimales? Se lo siguiente:
> > print "\101\n" = print "\x41\n"   octal y hexadecimal y ambos imprimen el
> > caracter " A " .  Pero como lo hago con numeros decimales?
> > 
> > tengo oct() y hex() los cuales son las funciones que convierten los numeros
> > octales y hexadecimales a decimales.  Cuales son las funciones que hacen lo
> > contrario ( de dec -> hex u oct )? 
> 
> 	Utiliza sprintf() o printf con formato %o para octal y %x para
> hexadecimal.

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.
------------------------------------------------------------------------



More information about the caracas-pm mailing list