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