假设我在字符串中有一个十六进制颜色代码,例如:
$color = '#fda80d';
我如何将其转换为实际的十六进制值,例如:
$color = 0xfda80d;
所以它不是一个字符串而是一个实际的十六进制值?
$color = '#fda80d';
$color = hexdec(substr($color, 1));
// Prove it
echo $color == 0xfda80d ? "yes" : "failed";
下面的代码显示 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
?>
您可以查看 PHP 的 bin2hex()。http://php.net/manual/en/function.bin2hex.php
另一种选择是使用方便的sscanf()
功能。
sscanf($color, '#%06x', $color);
var_dump(dechex(hexdec(str_replace('#', '', '#fda80d'))))
是一个字符串,所以你可能无法0xfda80d
像你写的那样得到它。