dechex

(PHP 4,PHP 5,PHP 7,PHP 8)

dechex十进制转十六进制

说明

dechex(int $num): string

返回一个含给定无符号 num 参数的 16 进制形式的字符串。

可转换的最大数字为 PHP_INT_MAX * 2 + 1(或 -1):在 32 位平台上,这将是十进制的 4294967295,其结果是由 dechex() 返回 ffffffff

参数

num

要转换的十进制值。

由于 PHP 的 int 类型是有符号的,但 dechex() 处理的是无符号整数,因此会将负整数视为无符号。

返回值

参数 num 的 16 进制字符串形式。

示例

范例 #1 dechex() 示例

<?php
echo dechex(10) . "\n";
echo
dechex(47);
?>

上面的示例将输出

a
2f

范例 #2 dechex() 使用大整数的示例

<?php
// 下面的输出假定一个 32 位平台。
// 请注意,对于所有值,输出都是相同的。
echo dechex(-1)."\n";
echo
dechex(PHP_INT_MAX * 2 + 1)."\n";
echo
dechex(pow(2, 32) - 1)."\n";
?>

上面的示例将输出

ffffffff
ffffffff
ffffffff

另请参阅

添加注释

用户贡献的注释 34 条注释

brent
17 年前
在字符串中存储时,非常小心不要对数字调用 dechex。

例如

它能处理的最大数字是 4294967295,十六进制为 FFFFFFFF,就像文档中说的。

dechex(4294967295) => FFFFFFFF //正确

但是,如果您将数字字符串传递给它,它将转换为 int,然后自动为您提供它能处理的最大 int。

dechex('4294967295') => 7FFFFFFF //错误!

所以,您需要转换为浮点

dechex((float) '4294967295') => FFFFFFFF //正确

我花了很长时间才弄明白,所以,我希望我刚刚节省了一点时间。
joost at bingopaleis dot com
22 年前
以下两个函数将把十进制大数字转换为十六进制数字,反之亦然。我指的是巨大的数字,比之前发布的任何函数都大得多。

<pre>
// 输入:字符串形式的十进制数字。
// 输出:字符串形式的等效十六进制数字。
function dec2hex($number)
{
$hexvalues = array('0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F');
$hexval = '';
while($number != '0')
{
$hexval = $hexvalues[bcmod($number,'16')].$hexval;
$number = bcdiv($number,'16',0);
}
return $hexval;
}

// 输入:字符串形式的十六进制数字。
// 输出:字符串形式的等效十进制数字。
function hex2dec($number)
{
$decvalues = 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');
$decval = '0';
$number = strrev($number);
for($i = 0; $i < strlen($number); $i++)
{
$decval = bcadd(bcmul(bcpow('16',$i,0),$decvalues[$number{$i}]), $decval);
}
return $decval;
}
</pre>
jrisken at mn dot rr dot com
19 年前
一种不太优雅但(也许)更快的填充方法是使用负长度参数填充子串。我在这个微小的函数中使用它,该函数格式化用于样式表的计算后的 rgb 颜色代码
<?
function toColor($n)
{
return("#".substr("000000".dechex($n),-6));
}
?>
mina86 at tlen dot pl
20 年前
创建随机十六进制颜色的最简单的方法

<?php
function rand_color() {
return
substr('00000' . dechex(mt_rand(0, 0xffffff)), -6);
}
?>
baoquyen804 at gmail dot com
9 年前
此基本函数将 RGB 字符串转换为颜色
<?php
function rgb_to_color($rgb, $symbols=' '){
$color = '';
$arr = explode($symbols, $rgb);
$count = count($arr);
for(
$i=0; $i<$count; $i++){
$color .= dechex($arr[$i]);
}
return
'#'.$color;
}
echo
rgb_to_color('186 186 18'); // #baba12
echo rgb_to_color('186-186-18', '-'); // #baba12
?>
匿名用户
19 年前
如果您需要生成随机 HEX 颜色,请使用此方法
<?php
函数 random_hex_color(){
返回
sprintf("%02X%02X%02X", mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
}
$hex = random_hex_color(); // 09B826
?>

享受吧。
sneskid at hotmail dot com
12 年前
如果您想要创建或解析有符号的 Hex 值

<?php
// $d 应为 int
函数 sdechex($d) { 返回 ($d<0) ? ('-' . dechex(-$d)) : dechex($d); }

// $h 应为字符串
函数 shexdec($h) { 返回 ($h[0] === '-') ? -('0x' . substr($h,1) + 0) : ('0x' . $h + 0); }

// 测试

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

同时请注意 ('0x' . $str + 0) 比 hexdec() 快
mountarreat at gmail dot com
16 年前
我遇到一个有关大型数字运算以及 PHP 中十六进制转换的问题。运算超出了无符号整数,甚至超出了浮点数范围。您可以轻松地根据自己的需要进行更改,但它(得益于 bcmath)能够通过字符串处理大数字。该功能将把数字转换成十六进制数。

然而在本特定示例中,由于我把它用于只能处理 32 位数字的游戏内部件,它会在 8 位处截断运算。例如,如果输入为 1,则它将填满零。输出 00000001h。

我当然不会说它好,但它可以为我服务,并满足我的目的。欢迎大家提供关于更快速代码的建议!

<?php
// 将数字转换为 32 位十六进制字符串;填入零
function lrgDec2Hex($number)
{
$i = 0;
$hex = array();

while(
$i < 8) {
if(
$number == 0) {
array_push($hex, '0');
}
else {
array_push($hex, strtoupper(dechex(bcmod($number, '16'))));
$number = bcdiv($number, '16', 0);
}
$i++;
}
krsort($hex);
return
implode($hex);
}
?>
Mista-NiceGuy at web dot de
18 年前
这些函数用于将罗马数字(例如 MXC)转换成十进制数,反之亦然。
注意:romdec() 不会验证字符串是否是罗马数字。若要强制用户输入成为真正的罗马数字,请使用 decrom(romdec($input))。例如,这将把 XXXX 转换为 XL。

<?php
function decrom($dec){
$digits=array(
1 => "I",
4 => "IV",
5 => "V",
9 => "IX",
10 => "X",
40 => "XL",
50 => "L",
90 => "XC",
100 => "C",
400 => "CD",
500 => "D",
900 => "CM",
1000 => "M"
);
krsort($digits);
$retval="";
foreach(
$digits as $key => $value){
while(
$dec>=$key){
$dec-=$key;
$retval.=$value;
}
}
return
$retval;
}

function
romdec($rom){
$digits=array(
"I" => 1,
"V" => 5,
"X" => 10,
"L" => 50,
"C" => 100,
"D" => 500,
"M" => 1000
);
$retval="";
$chars=array();
for(
$i=1;$i<=strlen($rom);$i++){
$chars[]=substr($rom,$i-1,1);
}
$step=1;
for(
$i=count($chars)-1;$i>=0;$i--){
if(!isset(
$digits[$chars[$i]])){ return "Error!"; }
if(
$step<=$digits[$chars[$i]]){
$step=$digits[$chars[$i]];
$retval+=$digits[$chars[$i]];
}
else{
$retval-=$digits[$chars[$i]];
}
}
return
$retval;
}

echo
decrom(romdec("XXXX"));
?>
admin AT bobfrank DOT org
19 年前
这是一个非常小的零填充,可用于数字

function zeropad($num, $lim)
{
return (strlen($num) >= $lim) ? $num : zeropad("0" . $num);
}

zeropad("234",6);

将产生
000234

zeropad("234",1);

将产生
234
monkyNOSPAM 在 phpfi dot org dot invalid
21 年前
下面是用于 RGB2hex 转换的位运算的使用方法。此函数返回十六进制 rgb 值,就像 [email protected] 在上方提交的一样。

function hexColor($color) {
return dechex(($color[0]<<16)|($color[1]<<8)|$color[2]);
}

示例

$col[0] = 25;
$col[1] = 255;
$col[2] = 55;

print hexColor($col);
jbleau 在 gmail dot com
15 年前
我被 dechex 的大小限制困惑了。这是我的解决方案。它支持更大的值,以及符号。

<?php
function dec_to_hex($dec)
{
$sign = ""; // suppress errors
if( $dec < 0){ $sign = "-"; $dec = abs($dec); }

$hex = Array( 0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5,
6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 'a',
11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e',
15 => 'f' );

do
{
$h = $hex[($dec%16)] . $h;
$dec /= 16;
}
while(
$dec >= 1 );

return
$sign . $h;
}
?>
delchodimi at gmail dot com
9 年前
我比较喜欢带有按位运算的范例,但是如果 color[0] 的值小于 16,则不准确
示例
color[0]: 0;
color[1]: 0;
color[2]: 255;
function hexColor($color) {
return dechex(($color[0]<<16)|($color[1]<<8)|$color[2]);
}
返回“ff”,这不是合法的 RGB 颜色...
因此,我的解决方案是结合上述函数和
function toColor($n)
{
return("#".substr("000000".dechex($n),-6));
}

如果你必须用一堆 rgb 值打交道,这是我的解决方法
------------------------------------------------------
function hexColor($color) {
$rgb = dechex(($color[0]<<16)|($color[1]<<8)|$color[2]);
return("#".substr("000000".$rgb, -6));
}
------------------------------------------------------
huda m elmatsani <justhuda at netscape dot net>
20 年前
创建随机十六进制颜色

function make_seed() {
list($usec, $sec) = explod e(' ', microtime());
return (float) $sec + ((double) $usec * 100000);
}

function rand_hex() {
mt_srand(make_seed());
$randval = mt_rand(0,255);
//转换成十六进制
return sprintf("%02X", $randval);
}

function random_color() {
return "#".rand_hex().rand_hex().rand_hex();
}

hme ;)
andries at centim dot be
12 年前
如果你需要将超大数字(> PHP_MAX_INT)转换成十六进制值,只需使用 base_convert。例如

base_convert('2190964402', 10, 16); // 829776b2
hmlinks at gmail dot com
11 年前
我写这个是为了将十六进制值转换成带符号的整数,希望这能帮到你们... 祝好 :)

<?php
$hex
= dechex(-32767);
$dec = shexdex($hex);

function
shexdex($hex){
$dec = hexdec($hex);

// 负数(如果是二进制数,则最高有效位为 1,则为负数)
// 由于一个十六进制数是 4 位,所以 8 和更高位的数字,其最高有效位为 1,因此是负数
if ($hex[0] >= '8'){ // 注意:如果你使用数字 8,它和 '8' 不同
$dec -= 1;
$dec = ~$dec;

return -
$dec;
}

return
$dec;
}

if (
$dec == -32767){
echo
'Yay!';
}
?>
sjaak at spoilerfreaks dot com
17 年前
为强制在某些功能中正确使用 32 位无符号整数,只需在对其进行处理之前添加 '+0'。

例如
<?php echo(dechex("2724838310")); ?>
会打印 '7FFFFFFF'
但它应当打印 'A269BBA6'

在添加“+0”时,php 会正确处理 32 位无符号整数
正确
<?php echo(dechex("2724838310"+0)); ?>
将打印 'A269BBA6'
allan-wegan at allan-wegan dot de
21 年前
接下来,提供一个将整数转换为十六进制字符串的不错且简单的函数,避免使用 DECHEX 函数,因为该函数过去经常更改其行为(现在在 PHP 4.3.2 版本中,它能够正确处理大于 0x7FFFFFFF 的数,但需要向后兼容)。

函数 &formatIntegerForOutput($value) {
$text = "00000000";
$transString = "0123456789ABCDEF";
// 处理最高四位(7 位)
$nibble = $value & 0x70000000;
$nibble >>= 28;
if ($value < 0) {
$nibble = $nibble | 0x00000008;
}
$text[0] = $transString[$nibble];
$value &= 0x0FFFFFFF;
// 0 至 6 位
for ($a = 7; $a > 0; $a --) {
$nibble = $value & 0x0000000F;
$text[$a] = $transString[$nibble];
$value >>= 4;
}
返回 $text
}

此函数速度不应太慢且非常简单。
我不确定 DECHEX 函数在将来是否会将其输出填充为始终为 8 个字符的长度,因此出于向后兼容性考虑,即使在以后的 PHP 版本中,我也避免使用它。
Anonymous
19 年前
如果你需要将 RGB 颜色转换为十六进制颜色,请使用以下内容
<?php
function rgb2hex($rgb){
return
sprintf("%06X", $rgb);
}
$hex = rgb2hex(65280); // 00FF00
?>
mahdiyari
2 年前
将零填充的十六进制字符串作为 2(8 位)对。

<?php
函数 dec2hex($int) {
$hex = dechex($int);
如果 (
strlen($hex)%2 != 0) {
$hex = str_pad($hex, strlen($hex) + 1, '0', STR_PAD_LEFT);
}
返回
$hex;
}

dec2hex(2); // 02
dec2hex(10); // 0a
dec2hex(256); // 0100
?>
hugo
7年前
警告 jbleau dec_to_hex 方法有缺陷,避免使用。

dec_to_hex('9900000397')-->24e16048f
dec_to_hex('9900000398')-->24e16048f
dec_to_hex('9900000399')-->24e16048f
mailderemi at gmail dot com
11 年前
Javascript 加密

<?php
函数 jsCrypt($script,$level=1){
对于 (
$j=0;$j<$level;$j++){
$asc='';
对于 (
$i=0;$i<strlen($script);$i++)
$asc.='%'.dechex(ord($script[$i]));
$script='<SCRIPT LANGUAGE="JavaScript">document.write(unescape(\''.$asc.'\'));</SCRIPT>';
}
返回
$script;
}

输出
jsCrypt('<script>alert(123);</script>',1);
?>
jenny-schubert87 dot 1 at web dot de
10 年前
我想出了另一种方法来完成此操作
如果您在 gmp 格式中有一个非常大的十进制数字(您总是可以使用 gmp_init($numberstring) 创建一个 gmp 数字),您可以简单地执行 gmp_strval($gmpnumber, 16),其中 $gmpnumber 是您的 gmp 数字,而 16 是您想要转换为的基数。它对我来说就像一个魅力,也适用于其他基数。
oliver at realtsp dot com
19 年前
在 64 位机器上使用时警告!额外的长度很重要!

32 位机器
php -r 'echo dechex(4294967295);'
输出:ffffffff

64 位机器
php -r 'echo dechex(4294967295);'
输出:ffffffff

到目前为止一切都很好。但对于稍微大一些的数字

32 位机器
php -r 'echo dechex(4294967296);'
输出:0

64 位机器
php -r 'echo dechex(4294967296);'
输出:100000000

注意差异!

在转换负数时这一点尤其重要

64 位机器
php -r 'echo dechex(-1);'
输出:ffffffffffffffff

32 位机器
php -r 'echo dechex(-1);'
输出:ffffffff

如果您希望您的代码可以移植到 amd64 或至强处理器(现在在托管公司中非常流行),那么您必须确保您的代码能够应对负数的结果的不同长度(以及最大值,尽管这可能不那么重要)。
wangster at darkcore dot net
19 年前
此函数将采用一个字符串并将其转换为十六进制转储。

例如。

3c666f6e 74207369 7a653d22 33223e4c <font.size."3">L
6561726e 20686f77 20746f20 62652061 learn.how.to.be.a

function hexdump($string) {
$hex="";
$substr = "";
for ($i=0; $i < strlen($string) ;$i++) {
if(!($i % 4) && $i != 0) {
$hex .= " ";
}
if(!($i % 16) && $i != 0) {
$clean = preg_replace("/[^a-zA-Z0-9!-.<>\/]/",".",$substr);
$hex .= " ".htmlentities($clean)."\n";
$substr = "";
}
$substr .= $string[$i];
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
daevid at daevid dot com
20 年前
我的红->黄->绿渐变的版本

<?php
function colorMeter($percent, $invert = false)
{
//$percent 位于 0.0 <= percent <= 1.0 的范围内
// 假设整数是 0% - 100%
// 并转换为浮点数 0.0 - 1.0
// 0.0 = 红色,0.5 = 黄色,1.0 = 绿色
//$invert 将使色彩比例反转
// 0.0 = 绿色,0.5 = 黄色,1.0 = 红色

//将 (int)% 值转换为 (float)
if (is_int($percent)) $percent = $percent * 0.01;

$R = min((2.0 * (1.0-$percent)), 1.0) * 255.0;
$G = min((2.0 * $percent), 1.0) * 255.0;
$B = 0.0;

return ((
$invert) ?
sprintf("%02X%02X%02X",$G,$R,$B)
:
sprintf("%02X%02X%02X",$R,$G,$B));
}
//colorMeter
?>

像这样使用它

<TABLE BORDER=1 WIDTH="300">
<?php
for ($i = 0.0; $i <= 1.0; $i += 0.10)
{
$RGB = colorMeter($i);
print
"<TR><TD BGCOLOR='".$RGB."'>".$i."</TD><TD>
<PRE>"
.$RGB."</PRE></TD></TR>\n";
}
?>
</TABLE>

<P>

<TABLE BORDER=1 WIDTH="300">
<?php
for ($i = 0; $i <= 100; $i += 10)
{
$RGB = colorMeter(intval($i), true);
print
"<TR><TD BGCOLOR='".$RGB."'>".$i."</TD><TD>
<PRE>"
.$RGB."</PRE></TD></TR>\n";
}
?>
</TABLE>
thr at recide dot net
20 年前
/*
* RGB颜色代码(即:255 0 255)转换为 16 进制颜色代码(即:FF00FF)
*/
函数 rgb2hex($rgb){
if(!is_array($rgb) || count($rgb) != 3){
echo "参数必须是包含 3 个整数元素的数组";
return false;
}
for($i=0;$i<count($rgb);$i++){
if(strlen($hex[$i] = dechex($rgb[$i])) == 1){
$hex[$i] = "0".$hex[$i];
}
}
return $hex;
}
/*示例*/
print_r(rgb2hex(array(10,255,255)));
cory at lavacube dot com
18 年前
将 16 进制颜色代码转换为“Web 安全”颜色的一个便捷小函数...

<?php

函数 color_mkwebsafe ( $in )
{
// 将值放入易于使用的数组
$vals['r'] = hexdec( substr($in, 0, 2) );
$vals['g'] = hexdec( substr($in, 2, 2) );
$vals['b'] = hexdec( substr($in, 4, 2) );

// 循环
foreach( $vals as $val )
{
// 转换值
$val = ( round($val/51) * 51 );
// 转换为 16 进制
$out .= str_pad(dechex($val), 2, '0', STR_PAD_LEFT);
}

return
$out;
}

?>

示例:color_mkwebsafe('0e5c94');
生成:006699

希望对您有所帮助... 祝编码愉快 :-)
jfren484 at hotmail dot com
22 年前
这是一个函数,适用于不大于 9007199254740992(16 进制 20000000000000)的十进制值。

function dec2hex($dec)
{
$hex = ($dec == 0 ? '0' : '');

while ($dec > 0)
{
$hex = dechex($dec - floor($dec / 16) * 16) . $hex;
$dec = floor($dec / 16);
}

return $hex;
}
kristoffer at caveo dot se
22 年前
这是一个十进制到 html 16 进制渐变的示例。尽情享受 :)

// 渐变量
$l = 20;

// 起始色
$start[0] = "255"; // 红色
$start[1] = "0"; // 绿色
$start[2] = "255"; // 蓝色

// 结束色
$end[0] = "255"; // 红色
$end[1] = "255"; // 绿色
$end[2] = "255"; //蓝色

for ($t = 1; $t < $l;) {

$x = $x * $t;

for ($i = 0; $i < 3;) {

$buffer[$i] = $start[$i] - $end[$i];
$buffer[$i] = floor($buffer[$i] / $l);
$rgb[$i] = $start[$i] - ($buffer[$i] * $t);

if ($rgb[$i] > 255) {

$rgb[$i] = 255;

}

$rgb[$i] = dechex($rgb[$i]);
$rgb[$i] = strtoupper($rgb[$i]);

if (strlen($rgb[$i]) < 2) {

$rgb[$i] = "0$rgb[$i]";

}

$i++;

}

$color = "$rgb[0]$rgb[1]$rgb[2]";
echo "$color";
$t++;

}

?>
morten at nilsen dot com
19 年前
我看到很多在这个页面上发布的不太理想的函数,所以我认为我必须提供一些更好的范例…
由于这个集合大小可观,我已经在我自己的服务器上发布了它,而不是将它复制/粘贴到这些评论中。

http://ryo-ohki.4th-age.com/demos/able.php

http://ryo-ohki.4th-age.com/demos/able.phps

来自以上资源的 dechex 替换函数
<?php
define
('BIT_BYTE', 8); // 每个字节的位数
define('HEX_BYTE', BIT_BYTE/4); // 字节中的十六进制数字

define('BIT_INT', 32); // int 的大小
define('HEX_INT', BIT_INT / (BIT_BYTE/HEX_BYTE)); // int 中的十六进制数字

function i2h($int, $group=HEX_BYTE, $size=HEX_INT, $sep=' ') {
$ret = '';
while(
$size--) {
$n=($int>>($size*4)) & 0xf;
$ret .= $n>9?chr(55 + $n):$n;
if(
$size && $size%$group == 0) $ret .= $sep;
}
return
$ret;
}

echo
i2h(rand(1,2)==1?-mt_rand():mt_rand());
?>
admin[将此内容删除] at torsoft dot no-ip dot com
20 年前
<?php
/*
此功能可能对某些人有用(对于编码来说可能),
将字符串转换为十六进制,将十六进制转换为字符串:
*/

function strhex($string)
{
$hex="";
for (
$i=0;$i<strlen($string);$i++)
$hex.=(strlen(dechex(ord($string[$i])))<2)? "0".dechex(ord($string[$i])): dechex(ord($string[$i]));
return
$hex;
}
function
hexstr($hex)
{
$string="";
for (
$i=0;$i<strlen($hex)-1;$i+=2)
$string.=chr(hexdec($hex[$i].$hex[$i+1]));
return
$string;
}
?>
9381904 at gmail dot com
12 年前
对于 Mac 地址
<?php
函数 dec2mac($mac) {
$mac=preg_split("([.])", $mac, 6);
$hexmac="";
foreach (
$mac as $part)
{
$part=dechex($part);
strlen($part)<2 ? $hexmac.="0$part" : $hexmac.=$part;
}
return
$hexmac;
}
echo
dec2mac("0.29.96.71.60.137"); // 001d60473c89
?>
科里·P。
10 年前
对于 RGBA 颜色,你还可以使用它。
函数 toAlphaColor($n,$a)
{
$rgb = substr("000000".dechex($n),-6);
$alpha = substr("00".dechex($a),-2);
return("#".$rgb.$alpha);
}
To Top