downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

hypot> <getrandmax
[edit] Last updated: Fri, 26 Apr 2013

view this page in

hexdec

(PHP 4, PHP 5)

hexdecHexadecimal to decimal

Description

number hexdec ( string $hex_string )

Returns the decimal equivalent of the hexadecimal number represented by the hex_string argument. hexdec() converts a hexadecimal string to a decimal number.

hexdec() will ignore any non-hexadecimal characters it encounters.

Parameters

hex_string

The hexadecimal string to convert

Return Values

The decimal representation of hex_string

Changelog

Version Description
4.1.0 The function can now convert values that are too big for the platforms integer type, it will return the value as float instead in that case.

Examples

Example #1 hexdec() example

<?php
var_dump
(hexdec("See"));
var_dump(hexdec("ee"));
// both print "int(238)"

var_dump(hexdec("that")); // print "int(10)"
var_dump(hexdec("a0")); // print "int(160)"
?>

See Also



hypot> <getrandmax
[edit] Last updated: Fri, 26 Apr 2013
 
add a note add a note User Contributed Notes hexdec - [48 notes]
up
2
chuckySTAR
4 years ago
Here's my hexdec function for greater numbers using BC Math

<?php
function bchexdec($hex)
{
   
$len = strlen($hex);
    for (
$i = 1; $i <= $len; $i++)
       
$dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i))));
   
    return
$dec;
}

echo
bchexdec('ffffffffffffffffffffffffffffffff') . "\n" . (pow(2, 128));
?>
up
2
k10206 at naver dot com
5 years ago
<?
function hexrgb($hexstr) {
    $int = hexdec($hexstr);

    return array("red" => 0xFF & ($int >> 0x10), "green" => 0xFF & ($int >> 0x8), "blue" => 0xFF & $int);
}
?>
up
1
programacion at mundosica dot com
1 year ago
Here is other function to transform a MAC Address to decimal:

<?php
function get_mac_decimal($mac) {
   
$clear_mac = preg_replace('/[^0-9A-F]/i','',$mac);
   
$mac_decimal = array();
    for (
$i = 0; $i < strlen($clear_mac); $i += 2 ):
       
$mac_decimal[] = hexdec(substr($clear_mac, $i, 2));
    endfor;
    return
implode('.',$mac_decimal);
}
?>
up
1
hafees at msn dot com
2 years ago
Use this function to convert a hexa decimal color code to its RGB equivalent. Unlike many other functions provided here, it will work correctly with hex color short hand notation.

Also, if a proper hexa decimal color value is given (6 digits), it uses bit wise operations for faster results.

For eg: #FFF and #FFFFFF will produce the same result

<?php
/**
 * Convert a hexa decimal color code to its RGB equivalent
 *
 * @param string $hexStr (hexadecimal color value)
 * @param boolean $returnAsString (if set true, returns the value separated by the separator character. Otherwise returns associative array)
 * @param string $seperator (to separate RGB values. Applicable only if second parameter is true.)
 * @return array or string (depending on second parameter. Returns False if invalid hex color value)
 */                                                                                                
function hex2RGB($hexStr, $returnAsString = false, $seperator = ',') {
   
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
   
$rgbArray = array();
    if (
strlen($hexStr) == 6) { //If a proper hex code, convert using bitwise operation. No overhead... faster
       
$colorVal = hexdec($hexStr);
       
$rgbArray['red'] = 0xFF & ($colorVal >> 0x10);
       
$rgbArray['green'] = 0xFF & ($colorVal >> 0x8);
       
$rgbArray['blue'] = 0xFF & $colorVal;
    } elseif (
strlen($hexStr) == 3) { //if shorthand notation, need some string manipulations
       
$rgbArray['red'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
       
$rgbArray['green'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
       
$rgbArray['blue'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
    } else {
        return
false; //Invalid hex color code
   
}
    return
$returnAsString ? implode($seperator, $rgbArray) : $rgbArray; // returns the rgb string or the associative array
} ?>

OUTPUT:

hex2RGB("#FF0") -> array( red =>255, green => 255, blue => 0)
hex2RGB("#FFFF00) -> Same as above
hex2RGB("#FF0", true) -> 255,255,0
hex2RGB("#FF0", true, ":") -> 255:255:0
up
1
jose dot rob dot jr at gmail dot com
3 years ago
I made these functions to pack up to 64 ID's into a mysql unsigned bigint.

ID's cannot repeat, must be <= bit's limit and > 0.

The functions uses php 32 bit's int as unsigned because we don't actually read the number, just the bits. Then 0xFFFFFFFF display -1 but the bit's are there (tested with linux 2.6 i686 and x86_64)

---

This is an other way to make hex to bin conversions:

<?php
function hexbin($hex, $padding = false)
{
   
// Validation
   
$hex = preg_replace('/^(0x|X)?/i', '', $hex);
   
$hex = preg_replace('/[[:blank:]]/', '', $hex);
    if(empty(
$hex))
    {
       
$hex = '0';
    }
    if(!
preg_match('/^[0-9A-F]*$/i', $hex))
    {
       
trigger_error('Argument is not a hex', E_USER_WARNING);
        return
false;
    }
   
   
// Conversion
   
$bin = '';
   
$hex = array_reverse(str_split($hex));
    foreach(
$hex as $n)
    {
       
$n = hexdec($n);
        for(
$i = 1; $i <= 8; $i <<= 1)
        {
           
$bin .= ($i & $n)? '1' : '0';
        }
        if(
$padding)
        {
           
$bin .= ' ';
        }
    }
    return
ltrim(strrev($bin));
}

// Tests
echo "<b>Debug:</b> <pre>";

// Randomly choosed padded number
var_dump(hexbin('00FF FF8F 7F3F FF1F', true));
// string(79) "0000 0000 1111 1111 1111 1111 1000 1111 0111 1111 0011 1111 1111 1111 0001 1111"

// Yellow RGB
var_dump(hexbin('0xF8F800'));
// string(24) "111110001111100000000000"

// Green RGB (padded)
var_dump(hexbin('0x008800', true));
//string(29) "0000 0000 1000 1000 0000 0000"

die("\n<br>debug");

?>

Have fun ;D
up
1
Walter Wlodarski
5 years ago
One of my favourite, multi-purpose, bidirectional solution I wrote many years ago:

function bgr2rgb($cr) {  // bidirectional
    return (($cr & 0x0000FF) << 16 | ($cr & 0x00FF00) | ($cr & 0xFF0000) >> 16);
}

Which you might want to use as :

function hex2cr($hex) {  // strips any leading characters, like #
    return bgr2rgb(hexdec($hex));
}

function cr2hex($cr) { // the usual HTML format, #rrggbb
    return '#'.str_pad(strtoupper(dechex(bgr2rgb($cr))), 6, '0', STR_PAD_LEFT);
}

And, if like me you tend to mistype function names, the synonym :

function rgb2bgr($val) { return bgr2rgb($val); }
up
1
bishop
7 years ago
Bullet-proof hex-to-rgb colour converter like brian at sagesport dot com wanted, just far fewer code lines. As a bonus, gives you the ability to return as string or array:

<?php
   
function &hex2rgb($hex, $asString = true)
    {
       
// strip off any leading #
       
if (0 === strpos($hex, '#')) {
           
$hex = substr($hex, 1);
        } else if (
0 === strpos($hex, '&H')) {
           
$hex = substr($hex, 2);
        }      

       
// break into hex 3-tuple
       
$cutpoint = ceil(strlen($hex) / 2)-1;
       
$rgb = explode(':', wordwrap($hex, $cutpoint, ':', $cutpoint), 3);

       
// convert each tuple to decimal
       
$rgb[0] = (isset($rgb[0]) ? hexdec($rgb[0]) : 0);
       
$rgb[1] = (isset($rgb[1]) ? hexdec($rgb[1]) : 0);
       
$rgb[2] = (isset($rgb[2]) ? hexdec($rgb[2]) : 0);

        return (
$asString ? "{$rgb[0]} {$rgb[1]} {$rgb[2]}" : $rgb);
    }
?>

Handles 2, 3, and 6 character colour codes with leading # or &H.
up
1
Anonymous
8 years ago
I wondered long time what is the best way to generate RGB-color from HEX-color, and just now i found the simpliest way!

<?php
$hex
= "FF00FF";
$rgb = hexdec($hex); // 16711935
?>

I hope this will save your time! :)
up
1
ayadav at infoprocorp dot com
7 years ago
From Amit Yadav

Hex to binary conversion

$num = hexdec("20DF");
echo binfromdec($num);

function binfromdec($num)
{
    if ($num > 32766)    return ("Too Large!");
    if ($num & 16384)    $bit15 = 1;
    if ($num & 8192)    $bit14 = 1;
    if ($num & 4096)    $bit13 = 1;
    if ($num & 2048)    $bit12 = 1;
    if ($num & 1024)    $bit11 = 1;
    if ($num & 512)        $bit10 = 1;
    if ($num & 256)        $bit9 = 1;
    if ($num & 128)        $bit8 = 1;
    if ($num & 64)        $bit7 = 1;
    if ($num & 32)        $bit6 = 1;
    if ($num & 16)        $bit5 = 1;
    if ($num & 8)        $bit4 = 1;
    if ($num & 4)        $bit3 = 1;
    if ($num & 2)        $bit2 = 1;
    if ($num & 1)        $bit1 = 1;

    return ("" . $bit15 . $bit14 . $bit13 . $bit12 . $bit11 . $bit10 . $bit9 . $bit8 . $bit7 . $bit6 . $bit5 . $bit4 . $bit3 . $bit2 . $bit1);

}
up
0
holdoffhunger at gmail dot com
10 months ago
When given large numbers, the hexdec function automatically converts the value to scientific notation.  So, "aa1233123124121241" as a hexadecimal value will be converted to "3.13725790445E+21".  If you're converting a hexadecimal value that represents a hash value (md5 or sha), then you need every single bit of that representation to make it useful.  By using the number_format function, you can do that perfectly.  For example :

<?php

           
// Author: holdoffhunger@gmail.com
   
        // Example Hexadecimal
        // ---------------------------------------------

   
$hexadecimal_string = "1234567890abcdef1234567890abcdef";
   
       
// Converted to Decimal
        // ---------------------------------------------

   
$decimal_result = hexdec($hexadecimal_string);
   
       
// Print Pre-Formatted Results
        // ---------------------------------------------

   
print($decimal_result);

           
// Output Here: "2.41978572002E+37"
            // .....................................
   
        // Format Results to View Whole All Digits in Integer
        // ---------------------------------------------

            // ( Note: All fractional value of the
            //         Hexadecimal variable are ignored
            //         in the conversion. )
                   
   
$current_hashing_algorithm_decimal_result = number_format($decimal_result, 0, '', '');
   
       
// Print Formatted Results
        // ---------------------------------------------

   
print($current_hashing_algorithm_decimal_result);

           
// Output Here: "24197857200151253041252346215207534592"
            // .....................................

?>
up
0
andy at haveland dot com
2 years ago
Here's a short example to convert strings between hex and chars:

<?php
print hextostr("616E647940686176656C616E642E636F6D")."\n";

print
strtohex("Knowledge is power")."\n";

function
hextostr($x) {
 
$s='';
  foreach(
explode("\n",trim(chunk_split($x,2))) as $h) $s.=chr(hexdec($h));
  return(
$s);
}

function
strtohex($x) {
 
$s='';
  foreach(
str_split($x) as $c) $s.=sprintf("%02X",ord($c));
  return(
$s);
}
?>
up
0
luisfc at setic dot ufsc dot br
2 years ago
Here is a function to transform a MAC Address to decimal.

<?php
function get_mac_decimal($mac) {
   
$invalid = array(":", "-", ";", ".", " ");
   
$clear_mac = str_replace($invalid, "", $mac);
   
$mac_decimal = "";

    for (
$i = 0; $i < strlen($clear_mac); $i = $i + 2) {
       
$mac_decimal .= hexdec(substr($clear_mac, $i, 2));
        if (
$i < strlen($clear_mac) - 2) {
           
$mac_decimal .= ".";
        }
    }
    return
$mac_decimal;
}
?>
up
0
Rosberg - rosberglinhares at gmail dot com
2 years ago
The correct version is:

function bchexdec($hex) {
    static $hexdec = array(
        "0" => 0,
        "1" => 1,
        "2" => 2,
        "3" => 3,
        "4" => 4,
        "5" => 5,
        "6" => 6,
        "7" => 7,
        "8" => 8,
        "9" => 9,
        "A" => 10,
        "B" => 11,
        "C" => 12,
        "D" => 13,
        "E" => 14,
        "F" => 15
    );

    $dec = 0;

    for ($i = strlen($hex) - 1, $e = 1; $i >= 0; $i--, $e = bcmul($e, 16)) {
        $factor = $hexdec[$hex[$i]];
        $dec = bcadd($dec, bcmul($factor, $e));
    }

    return $dec;
}
up
0
Halit YEL - halityesil at globya dot net
3 years ago
RGB to Hex
Hex to RGB
Function

<?PHP

function rgb2hex2rgb($c){
   if(!
$c) return false;
  
$c = trim($c);
  
$out = false;
  if(
preg_match("/^[0-9ABCDEFabcdef\#]+$/i", $c)){
     
$c = str_replace('#','', $c);
     
$l = strlen($c) == 3 ? 1 : (strlen($c) == 6 ? 2 : false);

      if(
$l){
         unset(
$out);
        
$out[0] = $out['r'] = $out['red'] = hexdec(substr($c, 0,1*$l));
        
$out[1] = $out['g'] = $out['green'] = hexdec(substr($c, 1*$l,1*$l));
        
$out[2] = $out['b'] = $out['blue'] = hexdec(substr($c, 2*$l,1*$l));
      }else
$out = false;
             
   }elseif (
preg_match("/^[0-9]+(,| |.)+[0-9]+(,| |.)+[0-9]+$/i", $c)){
     
$spr = str_replace(array(',',' ','.'), ':', $c);
     
$e = explode(":", $spr);
      if(
count($e) != 3) return false;
        
$out = '#';
         for(
$i = 0; $i<3; $i++)
           
$e[$i] = dechex(($e[$i] <= 0)?0:(($e[$i] >= 255)?255:$e[$i]));
             
         for(
$i = 0; $i<3; $i++)
           
$out .= ((strlen($e[$i]) < 2)?'0':'').$e[$i];
                 
        
$out = strtoupper($out);
   }else
$out = false;
         
   return
$out;
}

?>

Output

#FFFFFF =>
 Array{
   red=>255,
   green=>255,
   blue=>255,
   r=>255,
   g=>255,
   b=>255,
   0=>255,
   1=>255,
   2=>255
 }
 

#FFCCEE =>
 Array{
   red=>255,
   green=>204,
   blue=>238,
   r=>255,
   g=>204,
   b=>238,
   0=>255,
   1=>204,
   2=>238
 }
CC22FF =>
 Array{
   red=>204,
   green=>34,
   blue=>255,
   r=>204,
   g=>34,
   b=>255,
   0=>204,
   1=>34,
   2=>255
 }

0 65 255 => #0041FF
255.150.3 => #FF9603
100,100,250 => #6464FA


[EDIT BY danbrown AT php DOT net - Contains multiple bugfixes by (ajim1417 AT gmail DOT com) on 27-JAN-2010: Replaces typo in explode() and updates eregi() calls to preg_match().]
up
0
Ultimater at gmail dot com
4 years ago
hexdec doesn't accept numbers following the period.
What if you have a number like c20.db18?
<?php
function floatinghexdec($str)
{
    list(
$intgr,$hex)=explode('.',$str,2);
   
$intgr=ereg_replace("[^A-Fa-f0-9]", "", $intgr);
   
$hex=ereg_replace("[^A-Fa-f0-9]", "", $hex);
   
$answer=0;
    for(
$i=0;$i < strlen($hex); $i++)
    {
       
$digit=hexdec(substr($hex,$i,1))/16;   // .f is 15/16 because in decimal .9 is 9/10
       
$answer += $digit/pow(16,$i);
    }
return
hexdec($intgr)+$answer;
}

echo
floatinghexdec("ff.ff");//255.99609375
?>
up
0
eds at edsavenue dot com
4 years ago
I tried the example by joquius at kakugo dot com, but it didn't work.  i changed it to the following, which did work.

<?php
$str
= preg_replace_callback ("([a-zA-Z0-9]{2})", create_function ('$matches', 'return chr (hexdec ($matches[0]));'), $str);
?>
up
0
joquius at kakugo dot com
4 years ago
Help a hex-stricken string get back to normal:

<?php
$str
= preg_replace_callback ("/%([a-zA-Z0-9]{2})/", create_function ('$matches', 'return chr (hexdec ($matches[1]));'), $str);
?>
up
0
this1is4me at hotmail dot com
4 years ago
In reply to Amit Yadav's post (hex to binary conversion):

function binfromdec($num)
{
  $primary = "bit";
  for ($i=1; $i<=16; $i++)
    ${$primary.$i} = 0;
 
  if ($num & 32768)   $bit16  = 1;
  if ($num & 16384)   $bit15  = 1;
  if ($num & 8192)    $bit14  = 1;
  if ($num & 4096)    $bit13  = 1;
  if ($num & 2048)    $bit12  = 1;
  if ($num & 1024)    $bit11  = 1;
  if ($num & 512)     $bit10  = 1;
  if ($num & 256)     $bit9   = 1;
  if ($num & 128)     $bit8   = 1;
  if ($num & 64)      $bit7   = 1;
  if ($num & 32)      $bit6   = 1;
  if ($num & 16)      $bit5   = 1;
  if ($num & 8)       $bit4   = 1;
  if ($num & 4)       $bit3   = 1;
  if ($num & 2)       $bit2   = 1;
  if ($num & 1)       $bit1   = 1;
 
  return ($bit16. $bit15. $bit14. $bit13. $bit12. $bit11. $bit10. $bit9. $bit8. $bit7. $bit6. $bit5. $bit4. $bit3. $bit2. $bit1);
}
up
0
maddddidley at yahoo dot com
5 years ago
Function that combines two rgb colors.

function combineColors($color1, $color2) {
       
        $color1 = str_replace("#", '', $color1);
        $color2 = str_replace("#", '', $color2);
       
        $r1 = hexdec(substr($color1, 0, 2));
        $g1 = hexdec(substr($color1, 2, 2));
        $b1 = hexdec(substr($color1, 4, 2));
       
        $r2 = hexdec(substr($color2, 0, 2));
        $g2 = hexdec(substr($color2, 2, 2));
        $b2 = hexdec(substr($color2, 4, 2));
       
        $r3 = ceil(($r1 + $r2) / 2);
        $g3 = ceil(($g1 + $g2) / 2);
        $b3 = ceil(($b1 + $b2) / 2);
       
       
        $color = rgbhex($r3, $g3, $b3);
        return $color = str_replace("#", '', $color);
       
    }
up
0
Anonymous
5 years ago
// Função GET Cor Hexadecima e Retorna em RGB
function hexrgb($hexstr, $rgb) {
 $int = hexdec($hexstr);
 switch($rgb) {
        case "r":
        return 0xFF & $int >> 0x10;
            break;
        case "g":
        return 0xFF & ($int >> 0x8);
            break;
        case "b":
        return 0xFF & $int;
            break;
        default:
        return array(
            "r" => 0xFF & $int >> 0x10,
            "g" => 0xFF & ($int >> 0x8),
            "b" => 0xFF & $int
            );
            break;
    }   
}// END GET Cor Hex => RGB

//Uso
 echo hexrgb("1a2b3c", r); // 26
 echo hexrgb("1a2b3c", g); // 43
 echo hexrgb("1a2b3c", b); // 60
//ou

var_dump(hexrgb("1a2b3c", rgb)); //array(3) { ["r"]=>  int(26) ["g"]=>  int(43) ["b"]=>  int(60) }
up
0
venk
5 years ago
Reply To Halit Yesil's script:

Great Function!! But, there's a problem with your script if the user passes something with three letters/numbers (eg/ #000).  You need to use str_repeat to duplicate each character.

                if($l == 3){
                    unset($out);
                    $out[0] = $out['r'] = $out['red'] = hexdec(str_repeat(substr($c, 0,1),2));
                    $out[1] = $out['g'] = $out['green'] = hexdec(str_repeat(substr($c, 1,1),2));
                    $out[2] = $out['b'] = $out['blue'] = hexdec(str_repeat(substr($c, 2,1),2));
                }
up
0
Manithu
6 years ago
This tiny function will return foreground colors (either black or white) in contrast to the color you provide:

<?php

function getContrastColor($color)
{
    return (
hexdec($color) > 0xffffff/2) ? '000000' : 'ffffff';
}

?>

This function will return the opposite (negative):

<?php

function negativeColor($color)
{
   
//get red, green and blue
   
$r = substr($color, 0, 2);
   
$g = substr($color, 2, 2);
   
$b = substr($color, 4, 2);
   
   
//revert them, they are decimal now
   
$r = 0xff-hexdec($r);
   
$g = 0xff-hexdec($g);
   
$b = 0xff-hexdec($b);
   
   
//now convert them to hex and return.
   
return dechex($r).dechex($g).dechex($b);
}

?>
up
0
cgarvis at gmail dot com
6 years ago
Here is my version of hex2rgb for web colors to 24bit colors.

<?php
function hex2rgb_webcolors($hex) {
   
$hex = eregi_replace("[^a-fA-F0-9]", "", $hex);
    switch(
strlen($hex) ) {
        case
2:
           
$hex = substr($hex,0,2)."0000";
            break;
        case
3:
           
$hex = substr($hex,0,1).substr($hex,0,1)
            .
substr($hex,1,1).substr($hex,1,1)
            .
substr($hex,2,1).substr($hex,2,1);
            break;
        case
4:
           
$hex = substr($hex,0,4)."00";
            break;
        case
6:
            break;
        default:
           
$hex = 0;
            break;
    }
    return
hexdec($hex);
}
?>
up
0
repley at freemail dot it
6 years ago
From color to color to ...... to color with fade effect. Good for dynamic bar chart.

<?php
//MultiColorFade(array hex-colors, int steps)
function MultiColorFade($hex_array, $steps) {

$tot = count($hex_array);
$gradient = array();
$fixend = 2;
$passages = $tot-1;
$stepsforpassage = floor($steps/$passages);
$stepsremain = $steps - ($stepsforpassage*$passages);

   for(
$pointer = 0; $pointer < $tot-1 ; $pointer++) {
 
      
$hexstart = $hex_array[$pointer];
      
$hexend = $hex_array[$pointer + 1];

       if(
$stepsremain > 0){
           if(
$stepsremain--){
              
$stepsforthis = $stepsforpassage + 1;
           }
       }else{
          
$stepsforthis = $stepsforpassage;
       }
   
       if(
$pointer > 0){
          
$fixend = 1;        
       }
   
      
$start['r'] = hexdec(substr($hexstart, 0, 2));
      
$start['g'] = hexdec(substr($hexstart, 2, 2));
      
$start['b'] = hexdec(substr($hexstart, 4, 2));

      
$end['r'] = hexdec(substr($hexend, 0, 2));
      
$end['g'] = hexdec(substr($hexend, 2, 2));
      
$end['b'] = hexdec(substr($hexend, 4, 2));
 
      
$step['r'] = ($start['r'] - $end['r']) / ($stepsforthis);
      
$step['g'] = ($start['g'] - $end['g']) / ($stepsforthis);
      
$step['b'] = ($start['b'] - $end['b']) / ($stepsforthis);
   
       for(
$i = 0; $i <= $stepsforthis-$fixend; $i++) {
 
          
$rgb['r'] = floor($start['r'] - ($step['r'] * $i));
          
$rgb['g'] = floor($start['g'] - ($step['g'] * $i));
          
$rgb['b'] = floor($start['b'] - ($step['b'] * $i));
 
          
$hex['r'] = sprintf('%02x', ($rgb['r']));
          
$hex['g'] = sprintf('%02x', ($rgb['g']));
          
$hex['b'] = sprintf('%02x', ($rgb['b']));
 
          
$gradient[] = strtoupper(implode(NULL, $hex));
       }
   }
 
  
$gradient[] = $hex_array[$tot-1];
 
return
$gradient;
}
//end MultiColorFade()

//start test
$multi_hex_array = array();
$multi_hex_array[] = array('FF0000','FFFF00');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00','00FFFF');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00','00FFFF','0000FF');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00','00FFFF','0000FF','000000');
$multi_hex_array[] = array('FF0000','FFFF00','00FF00','00FFFF','0000FF','000000','FFFFFF');

foreach(
$multi_hex_array as $hex_array){

  
$totcolors = count($hex_array);
  
$steps = 44;

  
$a = MultiColorFade($hex_array, $steps);
  
$tot = count($a);

  
$table = '<table border=1 width="300">' . "\n";

   for (
$i = 0; $i < $tot; $i++){
      
$table .= ' <tr><td bgcolor="' . $a[$i] . '">' . ($i+1) .'</td><td><pre>' . $a[$i] . '</pre></td></tr>' . "\n";
   }
 
  
$table .= '</table><br /><br />';
 
   echo
'<br />Demanded steps = ' . $steps . '<br />';
   echo
'Returned steps = ' . $tot;
 
   if(
$steps == $tot){
       echo
'<br />OK.' . $steps . ' = ' . $tot . '<br />';
   }else{
       echo
'<br /><span style="color:#FF0000">FAILED! Demanded steps and returned steps are NOT equal!: ' . $steps . ' != ' . $tot . '</span><br />';
   }

   echo
$table;
 
}
//end test
?>

Repley.
up
0
cory at lavacube dot com
7 years ago
A handy little function to convert HEX colour codes to "web safe" colours...

<?php

function color_mkwebsafe ( $in )
{
  
// put values into an easy-to-use array
  
$vals['r'] = hexdec( substr($in, 0, 2) );
  
$vals['g'] = hexdec( substr($in, 2, 2) );
  
$vals['b'] = hexdec( substr($in, 4, 2) );

  
// loop through
  
foreach( $vals as $val )
   {
      
// convert value
      
$val = ( round($val/51) * 51 );
      
// convert to HEX
      
$out .= str_pad(dechex($val), 2, '0', STR_PAD_LEFT);
   }

   return
$out;
}

?>

Example: color_mkwebsafe('0e5c94');
Produces: 006699

Hope this helps someone out... Happy coding. :-)
up
0
hajamie@home
7 years ago
This function will take a hex $color, e.g. fa34bc and make it the shade you want, e.g. anywhere between 0 and 255. The smaller the number, the darker the output color.  It keeps the color the same, only changing the shade.  

function correctshade($color, $shade)
{
$r = hexdec(substr($color,0,2));
$g = hexdec(substr($color,2,2));
$b = hexdec(substr($color,4,2));
$sum = ($r + $g + $b);
$x = (($shade * 3) - $sum) / $sum;
if ($x >= 0) {
$x = $x + 1;
} else {
$x = 1 + $x;
}
$r = intval($x * $r);
$g = intval($x * $g);
$b = intval($x * $b);
$r = dechex($r);
$g = dechex($g);
$b = dechex($b);
return $r.$g.$b;
}
up
0
detrate at hotmail dot com
7 years ago
I made this for a little phpbb mod.  It was used to take the hex value from the database and make a color 20 (in decimal) less, resulting a darker color.

EXAMPLE: #336699 to #1f5285

<?php

$row1
= "336699"; // color
$c = 20;          // difference value

$rgb = array(substr($row1,0,2), substr($row1,2,2), substr($row1,4,2));

for(
$i=0; $i < 3; $i++)
{
  if((
hexdec($rgb[$i])-$c) >= 0)
  {
  
$rgb[$i] = hexdec($rgb[$i])-$c;

  
$rgb[$i] = dechex($rgb[$i]);
    if(
hexdec($rgb[0]) <= 9)
    
$rgb[$i] = "0".$rgb[$i];
  } else {
   
$rgb[$i] = "00";
  }
}

$row2 = $rgb[0].$rgb[1].$rgb[2];

?>
up
0
Gabriel Reguly
7 years ago
After esnhexdec from "rledger at gmail dot com",  the esndechex:

<?php
   
function esndechex($dec){
        
$a = strtoupper(dechex(substr($dec, 12)));
        
$b = strtoupper(dechex(substr($dec, 3, 10)));
         return
$a . $b;
    }
?>
up
0
rledger at gmail dot com
8 years ago
To convert a cellular ESN from hexadecimal to decimal, use the following code. The base conversion is different due to the fact that the first two characters of a hexadecimal value must be converted seperately from the remaining six characters.
<?
function esnhexdec($hex){
   $a = sprintf("%03d", hexdec(substr($hex, 0, 2)));
   $b = sprintf("%08d", hexdec(substr($hex, 2, 6)));
   return $a . $b;
}
?>
up
0
zubfatal, root at it dot dk
8 years ago
This replaces my previous class.
I've added a few more input checks in the rgb2hex function.
Also it returned incorrect hex values for 1-digit values.

color::rgb2hex(array(0,0,0)) would output 000 not 00000.

<?php

/**
* Convert colors
*
* Usage:
*  color::hex2rgb("FFFFFF")
*  color::rgb2hex(array(171,37,37))
*
* @author      Tim Johannessen <root@it.dk>
* @version     1.0.1
*/

class color {

   
/**
     * Convert HEX colorcode to an array of colors.
     * @return      array        Returns the array of colors as array(red,green,blue)
     */
    
   
function hex2rgb($hexVal = "") {
       
$hexVal = eregi_replace("[^a-fA-F0-9]", "", $hexVal);
        if (
strlen($hexVal) != 6) { return "ERR: Incorrect colorcode, expecting 6 chars (a-f, 0-9)"; }
       
$arrTmp = explode(" ", chunk_split($hexVal, 2, " "));
       
$arrTmp = array_map("hexdec", $arrTmp);
        return array(
"red" => $arrTmp[0], "green" => $arrTmp[1], "blue" => $arrTmp[2]);
    }
    
   
/**
     * Convert RGB colors to HEX colorcode
     * @return      string        Returns the converted colors as a 6 digit colorcode
     */
   
function rgb2hex($arrColors = null) {
        if (!
is_array($arrColors)) { return "ERR: Invalid input, expecting an array of colors"; }
        if (
count($arrColors) < 3) { return "ERR: Invalid input, array too small (3)"; }
        
       
array_splice($arrColors, 3);
        
        for (
$x = 0; $x < count($arrColors); $x++) {
            if (
strlen($arrColors[$x]) < 1) {
                return
"ERR: One or more empty values found, expecting array with 3 values";
            }
            
            elseif (
eregi("[^0-9]", $arrColors[$x])) {
                return
"ERR: One or more non-numeric values found.";
            }
            
            else {
                if ((
intval($arrColors[$x]) < 0) || (intval($arrColors[$x]) > 255)) {
                    return
"ERR: Range mismatch in one or more values (0-255)";
                }
                
                else {
                   
$arrColors[$x] = strtoupper(str_pad(dechex($arrColors[$x]), 2, 0, STR_PAD_LEFT));
                }
            }
        }
        
        return
implode("", $arrColors);
    }

}

?>
up
0
brian at sagesport dot com
8 years ago
The issue I've seen with the existing hex to dec conversion routines is the lack of error-trapping.  I stick to the theory that one should try to cover ALL the bases when writing a generalized routine such as this one.  I have a varied background that covers a wide variety of design/development languages, on the web as well as desktop apps.  As such I've seen multiple formats for writing hex colors.

For example, the color red COULD be written as follows:
#ff0000
&Hff0000
#ff
&Hff

Therefore I have written a function that is case-insensitive and takes into account the chance that different developers have a tendency to format hex colors in different ways.

<?php
 
function convert_color($hex){
   
$len = strlen($hex);
   
$chars = array("#","&","H","h");
   
$hex = strip_chars($hex, $chars);
   
preg_match("/([0-9]|[A-F]|[a-f]){".$len."}/i",$hex,$arr);
   
$hex = $arr[0];
    if (
$hex) {
      switch(
$len) {
        case
2:
         
$red = hexdec($hex);
         
$green = 0;
         
$blue = 0;
          break;
        case
4:
         
$red = hexdec(substr($hex,0,2));
         
$green=hexdec(substr($hex,2,2));
         
$blue = 0;
          break;
        case
6:
         
$red = hexdec(substr($hex,0,2));
         
$green=hexdec(substr($hex,2,2));
         
$blue = hexdec(substr($hex,4,2));
          break;      
      };
     
$color[success] = true;
     
$color[r] = $red;
     
$color[g] = $green;
     
$color[b] = $blue;
      return
$color;
    } else {
     
$color[success] = false;
     
$color[error] = "unable to convert hex to dec";
    };
  }

  function
strip_chars($string, $char){
   
$len = strlen($string);
   
$count = count($char);
    if (
$count >= 2) {
      for (
$i=0;$i<=$count;$i++) {
        if (
$char[$i]) {
         
$found = stristr($string,$char[$i]);
          if (
$found) {
           
$val = substr($string,$found+1,$len-1);
           
$string = $val;
          };
        };
      };
    } else {
     
$found = stristr($string,$char);
      if (
$found) {
       
$val = substr($string,$found+1,$len-1);
      };
    };
    echo
$val;
    return
$val;
  }

 
/*
    To use simply use the following function call:
      $color = convert_color("#FF");
      this will return the following assoc array if successful:
      *[success] = true
      *[r] = 255
      *[g] = 0
      *[b] = 0

      or copy and paste the following code:
     
      $hex = "FFFFFF"; // Color White
      $color = convert_color($hex);
      var_dump($color);
 */
?>

As you can see, the function "convert_color" accepts a hex # in most acceptable formats and returns an associative array.  [success] is set to TRUE if the function succeeds and FALSE if not.  The array members [r], [g] and [b] hold the red,green and blue values respectively.  If it fails, [error] holds a custom error message.

"strip_chars" is a support function written to remove the unwanted characters from the hex string, and sends the concatenated string back to the calling function.  It will accept either a single value or an array of values for the characters to remove.
up
0
groobo
8 years ago
It's just a revision to marfastic's ligten_up script, it simply adds/subtracts mod_color to orig_color.
I use it often to adjust tonals rather than brightness only

<?
function mod_color($orig_color, $mod, $mod_color){
    /*
        $orig_color - original html color, hex
        $mod_color - modifying color, hex
        $mod - modifier '+' or '-'
        usage: mod_color('CCCCCC', '+', '000033')
    */
    // does quick validation
    preg_match("/([0-9]|[A-F]){6}/i",$orig_color,$orig_arr);
    preg_match("/([0-9]|[A-F]){6}/i",$mod_color,$mod_arr);
    if ($orig_arr[0] && $mod_arr[0]) {
        for ($i=0; $i<6; $i=$i+2) {
            $orig_x = substr($orig_arr[0],$i,2);
            $mod_x = substr($mod_arr[0],$i,2);
            if ($mod == '+') { $new_x = hexdec($orig_x) + hexdec($mod_x); }
            else { $new_x = hexdec($orig_x) - hexdec($mod_x); }
            if ($new_x < 0) { $new_x = 0; }
            else if ($new_x > 255) { $new_x = 255; };
            $new_x = dechex($new_x);
            $ret .= $new_x;
        }
        return $ret;
    } else { return false; }
}
?>
up
0
andreas.schmeiler
10 years ago
Here's another hex2bin variant, works pretty well to me.

function hex2bin($hexdata) {
  
   for ($i=0;$i<strlen($hexdata);$i+=2) {
      $bindata.=chr(hexdec(substr($hexdata,$i,2)));
   }
  
   return $bindata;
}
up
0
chrism at four dot net
11 years ago
hexdec from 4.1.0 onwards does not show
the same size limitation and therefore
works differently with large numbers than previous php versions.

To obtain the same results, use:

(int) hexdec (...)
up
-1
sneskid at hotmail dot com
1 year ago
If you want to create or parse signed Hex strings:

<?php
// $d should be an int
function sdechex($d) { return ($d<0) ? ('-' . dechex(-$d)) : dechex($d); }

// $h should be a string
function shexdec($h) { return ($h[0] === '-') ? -('0x' . substr($h,1) + 0) : ('0x' . $h + 0); }

// test
$h = sdechex(-123); // string(3) "-7b"
$d = shexdec($h);   // int(-123)
var_dump($h, $d);
?>

Also note that ('0x' . $hexstr + 0) is faster than hexdec()
(Tested on PHP v5.2.17)
up
-1
flurinj at gmx dot net
3 years ago
Here My version of converting a hex string to a signed decimal value:

<?php

function hexdecs($hex)
{
   
// ignore non hex characters
   
$hex = preg_replace('/[^0-9A-Fa-f]/', '', $hex);
   
   
// converted decimal value:
   
$dec = hexdec($hex);
   
   
// maximum decimal value based on length of hex + 1:
    //   number of bits in hex number is 8 bits for each 2 hex -> max = 2^n
    //   use 'pow(2,n)' since '1 << n' is only for integers and therefore limited to integer size.
   
$max = pow(2, 4 * (strlen($hex) + (strlen($hex) % 2)));
   
   
// complement = maximum - converted hex:
   
$_dec = $max - $dec;
   
   
// if dec value is larger than its complement we have a negative value (first bit is set)
   
return $dec > $_dec ? -$_dec : $dec;
}

?>
up
-1
Halit Yesil mail at halityesil dot com
6 years ago
RGB to Hex
Hex to RGB
Function

<?PHP

function rgb2hex2rgb($c){
            if(!
$c) return false;
           
$c = trim($c);
           
$out = false;
            if(
eregi("^[0-9ABCDEFabcdef\#]+$", $c)){
               
$c = str_replace('#','', $c);
               
$l = strlen($c);
                if(
$l == 3){
                    unset(
$out);
                   
$out[0] = $out['r'] = $out['red'] = hexdec(substr($c, 0,1));
                   
$out[1] = $out['g'] = $out['green'] = hexdec(substr($c, 1,1));
                   
$out[2] = $out['b'] = $out['blue'] = hexdec(substr($c, 2,1));
                }elseif(
$l == 6){
                    unset(
$out);
                   
$out[0] = $out['r'] = $out['red'] = hexdec(substr($c, 0,2));
                   
$out[1] = $out['g'] = $out['green'] = hexdec(substr($c, 2,2));
                   
$out[2] = $out['b'] = $out['blue'] = hexdec(substr($c, 4,2));
                }else
$out = false;
               
            }elseif (
eregi("^[0-9]+(,| |.)+[0-9]+(,| |.)+[0-9]+$", $c)){
                if(
eregi(",", $c))
                   
$e = explode(",",$c);
                else if(
eregi(" ", $c))
                   
$e = explode(" ",$c);
                else if(
eregi(".", $c))
                   
$e = explode(".",$c);
                else return
false;
               
                if(
count($e) != 3) return false;
               
               
$out = '#';
                for(
$i = 0; $i<3; $i++)
                   
$e[$i] = dechex(($e[$i] <= 0)?0:(($e[$i] >= 255)?255:$e[$i]));
               
                for(
$i = 0; $i<3; $i++)
                   
$out .= ((strlen($e[$i]) < 2)?'0':'').$e[$i];
                   
               
$out = strtoupper($out);
            }else
$out = false;
           
            return
$out;
        }

        echo
'#FFFFFF => '.rgb2hex2rgb('#FFFFFF').'<br>';
        echo
'#FFCCEE => '.rgb2hex2rgb('#FFCCEE').'<br>';
        echo
'CC22FF => '.rgb2hex2rgb('CC22FF').'<br>';
        echo
'0 65 255 => '.rgb2hex2rgb('0 65 255').'<br>';
        echo
'255.150.3 => '.rgb2hex2rgb('255.150.3').'<br>';
        echo
'100,100,250 => '.rgb2hex2rgb('100,100,250').'<br>';

?>

Output

#FFFFFF =>
 Array{
   red=>255,
   green=>255,
   blue=>255,
   r=>255,
   g=>255,
   b=>255,
   0=>255,
   1=>255,
   2=>255
 }
 

#FFCCEE =>
 Array{
   red=>255,
   green=>204,
   blue=>238,
   r=>255,
   g=>204,
   b=>238,
   0=>255,
   1=>204,
   2=>238
 }
CC22FF =>
 Array{
   red=>204,
   green=>34,
   blue=>255,
   r=>204,
   g=>34,
   b=>255,
   0=>204,
   1=>34,
   2=>255
 }

0 65 255 => #0041FF
255.150.3 => #FF9603
100,100,250 => #6464FA
up
-1
greatwhitepine at NOSPAM dot yahoo dot ca
7 years ago
Hex to binary conversion that works for large and small hex numbers.

<?php

function hexbin($str_hex) {
 
$str_bin = FALSE;
  for (
$i=0; $i < strlen($str_hex); $i++) {
   
$str_bin .= sprintf("%04s", decbin(hexdec($str_hex[$i])));
  }
  return
$str_bin;
}

$str_hex = "effffff20df";

print
"\n           HEX VALUE: $str_hex\n";
printf("   REAL BINARY VALUE: %50s\n", hexbin($str_hex));
printf("CHOPPED BINARY VALUE: %50s\n\n", decbin(hexdec($str_hex)));

?>
up
-1
Anonymous
7 years ago
I needed to get the opposite colors so my website would be soft on the eyes.

<?php
function OppositeHex($color)
{
$r = dechex(255 - hexdec(substr($color,0,2)));
$r = (strlen($r) > 1) ? $r : '0'.$r;
$g = dechex(255 - hexdec(substr($color,2,2)));
$g = (strlen($g) > 1) ? $g : '0'.$g;
$b = dechex(255 - hexdec(substr($color,4,2)));
$b = (strlen($b) > 1) ? $b : '0'.$b;
return
$r.$g.$b;
}

//Example
$color = '000000';
echo
'The opposite of #'.$color.' is #'.OppositeHex($color).';
?>
up
-1
djneoform at gmail dot com
7 years ago
since i couldn't find one, here's an HEX to ASCII converter..

(takes HEX strings (in ASCII) and converts each two digit HEX code into it's ASCII equivalent)

function hex2ascii($str)
{
    $p = '';
    for ($i=0; $i < strlen($str); $i=$i+2)
    {
        $p .= chr(hexdec(substr($str, $i, 2)));
    }
    return $p;
}
up
-1
Joey Morwick
7 years ago
I found it helpful to have the inverse / reverse of this function laying around, since I wanted to insert some binary data into an xmlrpc call (it currently craps out when you do that), and I couldn't find one laying around, so here's a simple little function to do that:

function hex2bin($str) {
    $build = '';
    while(strlen($str) > 1) {
        $build .= chr(hexdec(substr($str, 0, 2)));
        $str = substr($str, 2, strlen($str)-2);
    }
    return $build;
}
up
-1
marfastic
8 years ago
Here is a function to brighten up any color:

function lighten_up($orig_color, $fraction_denom){
            // return the color between the color and white
            // based on the fraction denom that is passed
           
            if(!isset($fraction_denom))
                $fraction_denom = 2;
            $highest_val = hexdec("FF");
            $r = hexdec(substr($orig_color,0,2));
            $r = ($highest_val-$r)/$fraction_denom + $r;
            $g = hexdec(substr($orig_color,2,2));
            $g = ($highest_val-$g)/$fraction_denom + $g;
            $b = hexdec(substr($orig_color,4,2));
            $b = ($highest_val-$b)/$fraction_denom + $b;
            return dechex($r) . dechex($g) . dechex($b);
        }
up
-1
_meto ALT+q web.de
8 years ago
Damn, this took me some real long time! Maybe it's helpfull for those who even have no idea of color-Schemes like me ;)

If u want to generate PDF's for Print Offices u need to set all the colors in CMYK.

Here is a Function that will convert RGB to CMYK

<?
function hex2rgb($hex) {
  $color = str_replace('#','',$hex);
  $rgb = array('r' => hexdec(substr($color,0,2)),
               'g' => hexdec(substr($color,2,2)),
               'b' => hexdec(substr($color,4,2)));
  return $rgb;
}

function rgb2cmyk($var1,$g=0,$b=0) {
   if(is_array($var1)) {
      $r = $var1['r'];
      $g = $var1['g'];
      $b = $var1['b'];
   }
   else $r=$var1;
   $cyan    = 255 - $r;
   $magenta = 255 - $g;
   $yellow  = 255 - $b;
   $black   = min($cyan, $magenta, $yellow);
   $cyan    = @(($cyan    - $black) / (255 - $black)) * 255;
   $magenta = @(($magenta - $black) / (255 - $black)) * 255;
   $yellow  = @(($yellow  - $black) / (255 - $black)) * 255;
   return array('c' => $cyan / 255,
                'm' => $magenta / 255,
                'y' => $yellow / 255,
                'k' => $black / 255);
}

$color=rgb2cmyk(hex2rgb('#FF0000'));
pdf_setcolor($pdf, "both", "cmyk", $color['c'], $color['m'], $color['y'], $color['k']);
?>

U can call it with parameters (r,g,b) or just with an array(r,g,b) that contains these values.

Hope it works correct. All testing was fine.
up
-1
gelado at ip3 dot com
9 years ago
Another hex to decimal converter, up to the precision of PHP floats.

function longhex($hex)
{
    $dec = 0;
    $bitval = 1;
    for($pos = 1; $pos <= strlen($hex); $pos++) {
        $dec += hexdec(substr($hex, -$pos, 1)) * $bitval;
        $bitval *= 16;
    }
    return($dec);
}
up
-1
henrique at recidive dot com
9 years ago
Function to convert a string with hexadecimal colors to an associative array with RGB values:

<?
function hex2dec($hex) {
  $color = str_replace('#', '', $hex);
  $ret = array(
    'r' => hexdec(substr($color, 0, 2)),
    'g' => hexdec(substr($color, 2, 2)),
    'b' => hexdec(substr($color, 4, 2))
  );
  return $ret;
}

/*** Example:
print_r(hex2dec('3D58BE'));

or

print_r(hex2dec('#3D58BE'));

will return

Array
(
  [r] => 61
  [g] => 88
  [b] => 190
)
***/
?>

Thanks !

Henrique Recidive
up
-1
andychase at yahoo dot com
12 years ago
For hex numbers larger than 7FFFFFFF (E.G. PalmOS dates in seconds elapsed since 01/01/1904), I came up with this:

<?php
function bighexdec($hexnumber){

   
$numlength = strlen($hexnumber);

   
$decnumber = 0;

    for(
$x = 1; $x <= $numlength; $x++){

       
$place = $numlength - $x;
       
       
$operand = hexdec(substr($hexnumber,$place,1));
           
       
$exponent = pow(16,$x-1);

       
$decValue = $operand * $exponent;
   
       
$decnumber += $decValue;

    }
    return
$decnumber;
}
?>
up
-2
Jeremiah Shaulov
10 months ago
hexdec() returns unsigned integers. For example hexdec("FFFFFFFE") returns 4294967294, not -2. To convert to signed 32-bit integer you may do:
<?php
echo reset(unpack("l", pack("l", hexdec("FFFFFFFE"))));
?>
up
-2
Lukasz (Zajonc) Zajaczkowski
6 years ago
Function converting HEX to signed DEC

function hex2sdec ($hex)
{
  //how many bytes
  $ib = strlen ($hex) - (strlen ($hex) % $hex)) / $hex;
  if ((strlen ($hex) % 2) > 0)
    $ib = $ib + 1;

  //how many bites
  $ibb = 8 * $ib;

  //search for -1 value (max_uj)
  $buf = '1';
  for ($i = 1; $i <= $ibb - 1; $i++)
  {
    $buf .= '0';
  }
  $max_uj = bindec ($buf);

  //decide a sign, and calculate a value
  if (hexdec ($hex) < $max_uj)
  //+
  {
    $sdec = hexdec ($hex);
  }
  else
  //-
  {
    //search for max value + 1
    //(for ex. if hex = 23ef then max_p1 = ffff + 1)
    $buf = '';
    for ($i = 1; $i <= $ib; $i++)
    {
      $buf .= 'ff';
    }
    $max_p1 = hexdec ($buf) + 1;

    $sdec = hexdec ($hex) - $max_p1;
  }

  return $sdec;
}

 
show source | credits | stats | sitemap | contact | advertising | mirror sites