Convertir valor a base 16, resultados diferentes
(1/1)
:ohk<any>:
Buenas a todos,
Tengo esta cadena que debo convertir a base 16.
000012345678920190113163721231000011101000000000100001
Usando Java con esta funcion:
Código
System.Globalization.NumberStyles.HexNumber
Tengo este resultado:
8727F63A15F8976591FDDE5B387C5D015A29E06A1
Ahora bien, replicando lo mismo en PHP, al convertir el mismo valor a base 16 en PHP obtengo un resultado diferente:
303030303132333435363738393230313930313133313633373231323331303030303131313031303030303030303030313030303031
Y si este resultado le hago la conversion inversa tambien obtengo el resultado inicial.
¿Porqué pasa esto?
Porque la misma conversion en 2 lenguajes diferentes dan resultados diferentes?
Estoy haciendo algo mal?
Intente convertir usando estas funciones:
Código
dechex
base_convert
Incluso con esta funcion que encontre en internet:
Código
private function strhex($string) {
$hexstr = unpack('H*', $string);
return array_shift($hexstr);
}
Agradezco cualquier ayuda.
Saludos cordiales!
:ohk<any>:
Bueno, lo he resuelto, por si les pasa en la vida aca dejo la solución.
1ro asegurarse que tienen habilitado el:
Código:
[bcmath]
bcmath.scale = 2
en el archivo php.ini
Después de eso usamos esta función:
Código
/**
* @param $number
* @return string
*/
private function dec2hex($number)
{
$hexvalues = array('0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F');
$hexval = '';
while($number != '0')
{
$hexval = $hexvalues[bcmod($number,'16')].$hexval;
$number = bcdiv($number,'16',0);
}
return $hexval;
}
Lo llamamos así:
Código
return strtoupper($this->dec2hex((string)$valor));
Y problema solucionado.
Saludos!
Navegación