在PHP中将十六进制颜色代码转换为REAL十六进制值

时间:2012-05-22 18:02:13

标签: php colors hex

假设我在字符串中有一个十六进制颜色代码,例如:

$color = '#fda80d';

我如何将其转换为实际的十六进制值,以便:

$color = 0xfda80d;

那么它不是字符串而是实际的十六进制值?

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

以下代码显示PHP将数字存储为基数10,但您可以对任何基数中的数字进行数学运算。我在下面创建了一个演示,可以让您更好地了解如何使用它来比较不同基础中的数字。您还可以对不同基数的数字进行数学运算:

<?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';
?>

输出:

  

是十六进制

     

16623629

     

八进制

     

10

     

是基数10

     

12346

     

$ color是基数10,八进制和十六进制同时

     

$ octal是基数10,八进制和十六进制同时

     

$ number是基数10,八进制和十六进制同时

您可以动态检查基数为10(或十六进制/八位),例如10,等于十六进制数0xA,而不进行任何转换:

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

答案 2 :(得分:0)

你可以查看PHP的bin2hex()。 http://php.net/manual/en/function.bin2hex.php

答案 3 :(得分:0)

var_dump(dechex(hexdec(str_replace('#', '', '#fda80d'))))是一个字符串,所以可能没有办法像你写的那样获得0xfda80d

答案 4 :(得分:0)

另一种选择是使用方便的sscanf()功能。

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