php 十进制转十六进制

标签 php

我正在使用内置的 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 应该可以工作。

关于php 十进制转十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198398/

相关文章:

php - 存储来自 MySQL 的 10 个最新行

php - Laravel 5.1 - 自定义验证语言文件

php - Horde Autoloader - 如何使用?

php - 从列数不同的两个表中选择 *

PHP 文件上传 - 文件名中的重音符号和空格

php - Codeigniter 中的查询生成器生成正确的 SQL 语句,但执行查询会导致不正确的结果

php - Free Radius + Captive Portal + MySql 未收到有效的 RADIUS 响应

javascript - html页面中的head标签在页面加载后以编程方式关闭

php - 如何加速Mysql和PHP?

javascript - php以轮播方式显示文件夹中的所有图像