hexdec

(PHP 4, PHP 5, PHP 7)

hexdecПереводит число из шестнадцатеричной системы счисления в десятичную

Описание

number hexdec ( string $hex_string )

Возвращает десятичный эквивалент шестнадцатеричного числа, содержащегося в аргументе hex_string. hexdec() преобразует шестнадцатеричную строку в десятичное число.

hexdec() игнорирует любые обнаруженные не-шестнадцатеричные символы.

Список параметров

hex_string

Шестнадцатеричная строка для преобразования

Возвращаемые значения

Десятичное представление hex_string

Примеры

Пример #1 Пример использования hexdec()

<?php
var_dump
(hexdec("See"));
var_dump(hexdec("ee"));
// в обоих случаех будет выведено "int(238)"

var_dump(hexdec("that")); // выведет "int(10)"
var_dump(hexdec("a0")); // выведет "int(160)"
?>

Примечания

Замечание:

Эта функция может конвертировать числа, которые слишком большие для типа integer на текущей платформе. В этом случае большие значения возвращаются как float.

Смотрите также

  • dechex() - Переводит число из десятичной системы счисления в шестнадцатеричную
  • bindec() - Двоичное в десятичное
  • octdec() - Переводит число из восьмеричной системы счисления в десятичную
  • base_convert() - Преобразование числа между произвольными системами счисления

Коментарии

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 (...)
2001-12-15 12:02:37
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
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;
}
2003-02-05 07:59:34
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
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! :)
2005-01-19 11:33:54
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
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; }
}
?>
2005-02-10 13:46:28
http://php5.kiev.ua/manual/ru/function.hexdec.html
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.
2005-03-22 11:08:05
http://php5.kiev.ua/manual/ru/function.hexdec.html
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($hexVal2" ")); 
       
$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($arrColors3); 
         
        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]), 20STR_PAD_LEFT)); 
                } 
            } 
        } 
         
        return 
implode(""$arrColors); 
    } 



?>
2005-03-25 04:36:38
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
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 (=== strpos($hex'#')) { 
           
$hex substr($hex1);
        } else if (
=== strpos($hex'&H')) {
           
$hex substr($hex2);
        }       

       
// 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.
2005-06-04 22:51:29
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
After esnhexdec from "rledger at gmail dot com",  the esndechex:

<?php
   
function esndechex($dec){
         
$a strtoupper(dechex(substr($dec12)));
         
$b strtoupper(dechex(substr($dec310)));
         return 
$a $b;
    }
?>
2005-08-16 14:24:37
http://php5.kiev.ua/manual/ru/function.hexdec.html
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];

?>
2005-09-29 21:38:33
http://php5.kiev.ua/manual/ru/function.hexdec.html
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'] = hexdecsubstr($in02) );
   
$vals['g'] = hexdecsubstr($in22) );
   
$vals['b'] = hexdecsubstr($in42) );

   
// 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. :-)
2005-10-28 16:59:24
http://php5.kiev.ua/manual/ru/function.hexdec.html
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);

}
2005-12-28 02:03:32
http://php5.kiev.ua/manual/ru/function.hexdec.html
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-$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($hexstart02));
       
$start['g'] = hexdec(substr($hexstart22));
       
$start['b'] = hexdec(substr($hexstart42));

       
$end['r'] = hexdec(substr($hexend02));
       
$end['g'] = hexdec(substr($hexend22));
       
$end['b'] = hexdec(substr($hexend42));
 
       
$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.
2006-05-28 21:55:32
http://php5.kiev.ua/manual/ru/function.hexdec.html
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);
}
?>
2006-10-09 13:39:45
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
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($color02);
   
$g substr($color22);
   
$b substr($color42);
   
   
//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);
}

?>
2007-03-23 18:23:50
http://php5.kiev.ua/manual/ru/function.hexdec.html
<?
function hexrgb($hexstr) {
   
$int hexdec($hexstr);

    return array(
"red" => 0xFF & ($int >> 0x10), "green" => 0xFF & ($int >> 0x8), "blue" => 0xFF $int);
}
?>
2007-10-27 12:42:49
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
// 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) }
2007-11-13 22:34:38
http://php5.kiev.ua/manual/ru/function.hexdec.html
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);
       
    }
2008-01-27 02:17:56
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
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); }
2008-01-31 15:33:17
http://php5.kiev.ua/manual/ru/function.hexdec.html
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);
}
2008-05-27 05:46:23
http://php5.kiev.ua/manual/ru/function.hexdec.html
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);
?>
2008-09-24 09:12:30
http://php5.kiev.ua/manual/ru/function.hexdec.html
Автор:
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($decbcmul(strval(hexdec($hex[$i 1])), bcpow('16'strval($len $i))));
   
    return 
$dec;
}

echo 
bchexdec('ffffffffffffffffffffffffffffffff') . "\n" . (pow(2128));
?>
2009-04-15 16:55:11
http://php5.kiev.ua/manual/ru/function.hexdec.html
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
?>
2009-04-19 16:54:21
http://php5.kiev.ua/manual/ru/function.hexdec.html
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
2009-08-15 23:13:26
http://php5.kiev.ua/manual/ru/function.hexdec.html
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) == : (strlen($c) == false);

      if(
$l){
         unset(
$out);
         
$out[0] = $out['r'] = $out['red'] = hexdec(substr($c0,1*$l));
         
$out[1] = $out['g'] = $out['green'] = hexdec(substr($c1*$l,1*$l));
         
$out[2] = $out['b'] = $out['blue'] = hexdec(substr($c2*$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().]
2009-10-02 04:30:27
http://php5.kiev.ua/manual/ru/function.hexdec.html
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* (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;
}

?>
2010-04-06 10:13:50
http://php5.kiev.ua/manual/ru/function.hexdec.html
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;
}
2010-05-06 11:45:11
http://php5.kiev.ua/manual/ru/function.hexdec.html
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($hexStr01), 2));
       
$rgbArray['green'] = hexdec(str_repeat(substr($hexStr11), 2));
       
$rgbArray['blue'] = hexdec(str_repeat(substr($hexStr21), 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
2010-08-19 06:31:00
http://php5.kiev.ua/manual/ru/function.hexdec.html
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);
}
?>
2010-10-25 01:55:20
http://php5.kiev.ua/manual/ru/function.hexdec.html
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 += ):
       
$mac_decimal[] = hexdec(substr($clear_mac$i2));
    endfor;
    return 
implode('.',$mac_decimal);
}
?>
2011-12-06 23:50:47
http://php5.kiev.ua/manual/ru/function.hexdec.html
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)
2012-03-24 04:50:59
http://php5.kiev.ua/manual/ru/function.hexdec.html
function hex2rgb($hex) {
    if ($hex[0]=='#') $hex = substr($hex,1);
    if (strlen($hex)==3){
        $hex = $hex[0].$hex[0].$hex[1].$hex[1].$hex[2].$hex[2];
    }
    $int = hexdec($hex);
    return array("red" => 0xFF & ($int >> 0x10), "green" => 0xFF & ($int >> 0x8), "blue" => 0xFF & $int);
}
2016-05-02 17:31:16
http://php5.kiev.ua/manual/ru/function.hexdec.html

    Поддержать сайт на родительском проекте КГБ