【问题标题】:Convert hex color code into REAL hex value in PHP在 PHP 中将十六进制颜色代码转换为真实的十六进制值
【发布时间】:2012-05-29 06:25:14
【问题描述】:

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

$color = '#fda80d';

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

$color = 0xfda80d;

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

【问题讨论】:

  • 您是否正在尝试将字符串转换为十六进制? PHP 中没有真正的“转换”,因为它是“无类型”的。
  • 是的,字符串颜色代码到它的十六进制等效值。
  • 这个conversion function 可以提供帮助。

标签: php colors hex


【解决方案1】:
$color = '#fda80d';
$color = hexdec(substr($color, 1));

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

【讨论】:

  • 这也会传递一个有趣的===。我猜 PHP 也将十六进制数字转换为 dec 以进行类型比较。也许它被视为只是一个数字而不是某种数字类型?
  • 其实结果是一个int,16623629。但是$color === 16623629$color === 0xfda80d是一回事。
【解决方案2】:

以下代码显示 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
?>

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        另一种选择是使用方便的sscanf() 函数。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-01
          • 1970-01-01
          • 2012-05-14
          • 2019-10-29
          • 2018-10-13
          • 1970-01-01
          • 2012-08-23
          相关资源
          最近更新 更多