- Detalles
- Por Juan Padial
- En Programación
- Visto: 2640
php dispone de funciones ya listas para pasar números de una base a otra. Estamos acostumbrados a utilizar la base decimal pero puede que por alguna razón necesites pasar el número de base decimal a otra o viceversa.
Conversión de una variable de cualquier base a base 10 con intval()
Para realizar la transformación de un número expresado en cualquier base a base 10 se puede utilizar la función intval(). Esta función devuelve el valor entero en base 10 (integer, número positivo, negativo o cero, sin decimales), por tanto se perderá cualquier decimal, de la variable especificada y lleva los siguientes parámetros:
- $variable: parámetro mixto, puede ser int o string. En caso de que sea tipo int deberá ponerse sin comillas simples y no se tendrá en cuenta la base especificada no realizándose ninguna conversión ya que php interpreta que ya es un dato int. En caso de tipo string se pone entre comillas simples y se pasará a la base indicada en el siguiente parámetro. Esta ha de ser una variable escalar, lo que quiere decir que no se puede utilizar en variables que sean objetos o arrays.
- $base: este un parámetro tipo int y en él se especifica la base en la que está representado el dato especificado en el parámetro $variable. Por defecto es 10.
Al leer estas líneas puedes deducir que intval() no es una función con la finalidad de convertir números de una base a otra, y tienes razón, su finalidad es la dicha, dar el valor entero de una variable numérica (int) o cadena de caracteres (string). No obstante, puede ser utilizada para transformar cualquier número dado en cualquier base a base 10.
Ejemplo:
<?php
intval(34,8); //el resultado es 34 pues se ha puesto como dato int y no se realiza conversión
intval('34',8); //el resultado es 28 (34 en base 8 en un sistema de 32 bits corresponde a 28 en base decimal
intval('34.4',8); //el resultado es 28 ya que se devuelve dato int, no se toman los decimales
intval(34.4,8); // el resultado es 34
intval('fg',32); // el resultado es 496
?>
Conversión entre diferentes bases con base_convert()
base_convert(), como su nombre indica, es una función de php para convertir datos numéricos de una base a otra. Tiene tres parámetros y son los siguientes:
- $numero: este parámetro es una cadena (dato tipo string) en la que se representa el número que se desea convertir.
- $desde_base: parámetro tipo int en el que se especifica la base en la que está el número especificado en la variable $numero. Valor comprendido entre 2 y 36.
- $a_base: parámetro tipo int en el que especifica la base a la que se convertirá el número dado en el parámetro $numero. Admite valores entre 2 y 36.
El valor devuelto por base_convert() es una cadena de texto que contiene el resultado de la conversión del número de una base a otra. Si se devuelve un número con base mayor a 10 se representa también con letras donde la "a" siginifca 10, la "b" 11, etc hasta la "z" que siginifica 35.
Ejemplo:
<?php
//paso del número 49 de base decimal a base 32
base_convert('49',10,32);
//paso del número 8 de base 32 a base decimal
base_convert('49',32,10);
//paso del numero 8 de base 32 a base decimal con intval
intval('49',32);
?>
El resultado del código anterior es 1h, 49 y 49. La diferencia entre las dos últimas operaciones, que aparentemente son iguales, es que con base_convert() obtenemos un string, una cadena de texto con el resultado, mientras que con intval el valor del resultado es un número (tipo int) y no caracteres. También hay que destacar que intval() no tendrá en cuenta los decimales mientras que base_convert() sí los tomará en cuenta aunque se puede perder precisión al realizar la conversión.
Creado el 23 05 2011 Actualizado el 07 10 2011
