php – 在32位系统上将64位整数十六进制字符串转换为64位十进制字符串

什么是将编码为十六进制字符串的64位整数转换为32位系统上的十进制字符串的简单方法.它必须是完整的价值,它不能用科学记数法或截断:/

“0c80000000000063”==“900719925474099299”

“0c80000000000063”!= 9.007199254741E 17

PHP的base_convert()和hexdec()不能正常工作.

最佳答案
您需要使用BC Math PHP扩展(捆绑).

首先拆分输入字符串以获得高字节和低字节,然后将其转换为十进制,然后通过BC函数进行计算,如下所示:

$input = "0C80000000000063";

$str_high = substr($input, 0, 8);
$str_low = substr($input, 8, 8);

$dec_high = hexdec($str_high);
$dec_low  = hexdec($str_low);

//workaround for argument 0x100000000
$temp = bcmul ($dec_high, 0xffffffff);
$temp2 = bcadd ($temp, $dec_high);

$result = bcadd ($temp2, $dec_low);

echo $result;

/*
900719925474099299
*/

转载注明原文:php – 在32位系统上将64位整数十六进制字符串转换为64位十进制字符串 - 代码日志