Convierta el código de color hexadecimal en valor hexadecimal REAL en PHP

Supongamos que tengo un código de color hexadecimal en una cadena como:

$color = '#fda80d';

¿Cómo podría convertir esto en un valor hexadecimal real tal que:

$color = 0xfda80d;

¿Entonces no es una cadena sino un valor hexadecimal real?

preguntado el 22 de mayo de 12 a las 19:05

¿Estás tratando de convertir una cadena en un hexadecimal? Realmente no hay 'conversión' en PHP porque es 'sin tipo'. -

sí, el código de color de la cadena a su equivalente hexadecimal. -

Este planteamiento de « función de conversión podría ayudar. -

5 Respuestas

$color = '#fda80d';
$color = hexdec(substr($color, 1));

// Prove it
echo $color == 0xfda80d ? "yes" : "failed";

contestado el 22 de mayo de 12 a las 19:05

Esto también pasará un === lo cual es interesante Supongo que PHP también convierte números hexadecimales a dec para comparar tipos. ¿Tal vez se ve solo como un número en lugar de un cierto tipo de número? - afuzzyllama

En realidad, el resultado es un int, 16623629. Pero ambos $color === 16623629 y $color === 0xfda80d son lo mismo. - fluir libremente

El siguiente código muestra que PHP almacena números en base 10, pero puede hacer operaciones matemáticas con el número en cualquier base. He creado una demostración a continuación que debería darle una mejor idea de cómo puede usar esto para comparar números en diferentes bases entre sí. También puedes hacer operaciones matemáticas con números en diferentes bases:

<?php
$color = '#fda80d'; //String color
$color = substr($color,1,6); //String color without the #

$color = '0x'.$color; //Prepend the 0x
$color += 0x00; //Force it to be a number

if($color === 0xfda80d) //Check the number is EXACTLY what we are expecting
    echo 'Is hex<br />'; //This code is run, proving it is a hex ***number***

echo $color; //Outputs 16623629 (base 10)

#================================#

echo '<br /><br />';

$octal = 011; //Define an octal number
$octal += 01; //Add 1

if($octal === 012)
    echo 'Is octal<br />';

echo $octal; //Outputs 10 (base 10)

#================================#

echo '<br /><br />';

$number = 12345; //Define a standard base 10 int
$number += 1; //Add 1 to the int

if($number === 12346)
    echo 'Is base 10<br />';

echo $number; //Outputs 12346 (base 10)


#================================#

echo '<br /><br />';

if($color === 16623629 && $color === 077324015 && $color === 0xFDA80D)
    echo '$color is base 10, octal and hex all at the same time<br />';

if($octal === 10 && $octal === 012 && $octal === 0xA)
    echo '$octal is base 10, octal and hex all at the same time<br />';

if($number === 12346 && $number === 030072 && $number === 0x303A)
    echo '$number is base 10, octal and hex all at the same time';
?>

Salidas:

es hexadecimal

16623629

es octal

10

es base 10

12346

$color es base 10, octal y hexadecimal, todo al mismo tiempo

$octal es base 10, octal y hexadecimal, todo al mismo tiempo

$number es base 10, octal y hexadecimal, todo al mismo tiempo

Puede verificar un número de base 10 (o hexadecimal/oct), por ejemplo 10, es igual al número hexadecimal 0xA sobre la marcha sin ninguna conversión:

<?php
if(10 === 0xA)
    echo 'Success'; //This code is run
?>

contestado el 22 de mayo de 12 a las 19:05

Puede buscar en bin2hex() de PHP. http://php.net/manual/en/function.bin2hex.php

contestado el 22 de mayo de 12 a las 19:05

var_dump(dechex(hexdec(str_replace('#', '', '#fda80d')))) es una cadena, por lo que probablemente no haya forma de que pueda obtener 0xfda80d como lo escribiste.

contestado el 22 de mayo de 12 a las 19:05

Otra opción es usar el práctico sscanf() función.

sscanf($color, '#%06x', $color);

contestado el 22 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.