2012-05-22 2 views
1

, предполагающих У меня есть код шестнадцатеричного цвета в строке, например:Преобразовать код шестнадцатеричного цвета в РЕАЛЬНОЕ шестнадцатеричном значение в PHP

$color = '#fda80d'; 

Как я мог преобразовать это в фактическое шестнадцатеричном значение, например, что:

$color = 0xfda80d; 

Так что это не строка, а фактическое значение гексагонального значения?

+0

Вы пытаетесь преобразовать строку в шестнадцатеричный? На самом деле в PHP нет «конвертирования», потому что это «нет». – afuzzyllama

+0

Да, код цвета строки соответствует шестнадцатеричной форме. – btantlinger

ответ

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

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

да, hexdec это то, что я пытался сделать. Благодаря! – btantlinger

+0

Это также передаст '===', что интересно. Я предполагаю, что PHP преобразует шестнадцатеричные числа в dec для сравнения типов. Может быть, это рассматривается как просто число вместо определенного типа номера? – afuzzyllama

+1

На самом деле результатом является int, 16623629. Но оба '$ color === 16623629' и' $ color === 0xfda80d' - это одно и то же. – flowfree

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

Выходы:

шестнадцатеричное

восьмеричный

низкопробна 10

$ цвет основание 10, восьмеричное и шестнадцатеричное все в то же время

$ восьмеричной является базой 10, восьмеричное и шестнадцатеричное все в то же время

$ число по основанию 10 , восьмеричная и шестнадцатеричные все в то же время

Вы можете проверить базовый 10 номер (или шестигранный/октябрь), например 10, равно шестнадцатеричного число 0xA на лета без какого-либо кона Версия:

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

Интересно! Спасибо за информативный ответ. – btantlinger

0

var_dump(dechex(hexdec(str_replace('#', '', '#fda80d')))) является строкой, поэтому, вероятно, нет никакого способа, вы можете получить 0xfda80d, как вы написали.

0

Другой вариант - использовать удобную функцию sscanf().

sscanf($color, '#%06x', $color); 
Смежные вопросы