加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php将十进制转换为十六进制

发布时间:2020-12-13 22:38:56 所属栏目:PHP教程 来源:网络整理
导读:我正在使用内置的OpenSSL库从数字证书中提取序列,但是,我无法精确地将此数字转换为十六进制. 提取的数字最初是十进制的,但我需要以十六进制表示. 我想兑换的号码是:114483222461061018757513232564608398004 这是我尝试过的: dechex()不起作用,它返回:7ff
我正在使用内置的OpenSSL库从数字证书中提取序列,但是,我无法精确地将此数字转换为十六进制.

提取的数字最初是十进制的,但我需要以十六进制表示.

我想兑换的号码是:114483222461061018757513232564608398004

这是我尝试过的:

> dechex()不起作用,它返回:7fffffffffffffff

我能得到的最接近的是来自php.net页面的这个函数,但是它并没有转换整个数字.

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

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

  return $hex;
}
echo dec2hex('114483222461061018757513232564608398004');
//Result: 5620aaa80d50fc000000000000000000

这是我所期待的:

>十进制数:114483222461061018757513232564608398004
>预期的十六进制:5620AAA80D50FD70496983E2A39972B4

我可以在这里看到修正转换:
https://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html

我需要一个PHP解决方案.

问题是 that The largest number that can be converted is ... 4294967295 – 因此它不适合你.

This answer在快速测试期间为我工作,假设您在服务器上安装了bcmath,并且您可以将该数字作为字符串开头.如果你不能,即它以数字变量开始生命,你将立即达到PHP’s float limit.

// Credit: joost at bingopaleis dot com
// Input: A decimal number as a String.
// Output: The equivalent hexadecimal number as a String.
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;
}

例:

$number = '114483222461061018757513232564608398004'; // Important: already a string!
var_dump(dec2hex($number)); // string(32) "5620AAA80D50FD70496983E2A39972B4"

确保将字符串传递给该函数,而不是数字变量.在您在问题中提供的示例中,看起来您最初可以将该数字作为字符串获取,因此如果您安装了bc,则应该可以使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读