Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中添加大型十六进制字符串_Php_Math_Hex - Fatal编程技术网

在PHP中添加大型十六进制字符串

在PHP中添加大型十六进制字符串,php,math,hex,Php,Math,Hex,我需要在PHP中添加两个十六进制字符串,并将结果作为十六进制字符串返回。我目前正在使用以下代码: $s1='f452f5a90e5dc303ab2b1ed139d90782fe98f0694f8c7bf88cade835'; $s2='74392c4cfc18badea29a1048f427c602c56e5d2fdff0860878e67c92'; $sum = hexdec($s1)+hexdec($s2); $sum1 = dechex ($sum); echo $sum."<b

我需要在PHP中添加两个十六进制字符串,并将结果作为十六进制字符串返回。我目前正在使用以下代码:

$s1='f452f5a90e5dc303ab2b1ed139d90782fe98f0694f8c7bf88cade835';
$s2='74392c4cfc18badea29a1048f427c602c56e5d2fdff0860878e67c92';

$sum = hexdec($s1)+hexdec($s2);
$sum1 = dechex ($sum);

echo $sum."<br>";
echo $sum1;
function bchexdec($hex) {
    if(strlen($hex) == 1) {
        return hexdec($hex);
    } else {
        $remain = substr($hex, 0, -1);
        $last = substr($hex, -1);
        return bcadd(bcmul(16, bchexdec($remain)), hexdec($last));
    }
}

function bcdechex($dec) {
    $last = bcmod($dec, 16);
    $remain = bcdiv(bcsub($dec, $last), 16);

    if($remain == 0) {
        return dechex($last);
    } else {
        return bcdechex($remain).dechex($last);
    }
}

$s1='f452f5a90e5dc303ab2b1ed139d90782fe98f0694f8c7bf88cade835';
$s2='74392c4cfc18badea29a1048f427c602c56e5d2fdff0860878e67c92';

echo bcdechex(bcadd(
    bchexdec($s1), bchexdec($s2)
));

有没有一种方法可以在PHP中更好地执行十六进制计算?

事实上,dechex的最大回报是:

ffffffff

所以它返回0是很正常的^^


希望我能帮上点忙:事实上dechex的最大回报是:

ffffffff

所以它返回0是很正常的^^


希望我能帮点忙:p

对于PHP的整数数据类型来说,数字太大了。具有扩展名,并且,您可以使用以下代码:

$s1='f452f5a90e5dc303ab2b1ed139d90782fe98f0694f8c7bf88cade835';
$s2='74392c4cfc18badea29a1048f427c602c56e5d2fdff0860878e67c92';

$sum = hexdec($s1)+hexdec($s2);
$sum1 = dechex ($sum);

echo $sum."<br>";
echo $sum1;
function bchexdec($hex) {
    if(strlen($hex) == 1) {
        return hexdec($hex);
    } else {
        $remain = substr($hex, 0, -1);
        $last = substr($hex, -1);
        return bcadd(bcmul(16, bchexdec($remain)), hexdec($last));
    }
}

function bcdechex($dec) {
    $last = bcmod($dec, 16);
    $remain = bcdiv(bcsub($dec, $last), 16);

    if($remain == 0) {
        return dechex($last);
    } else {
        return bcdechex($remain).dechex($last);
    }
}

$s1='f452f5a90e5dc303ab2b1ed139d90782fe98f0694f8c7bf88cade835';
$s2='74392c4cfc18badea29a1048f427c602c56e5d2fdff0860878e67c92';

echo bcdechex(bcadd(
    bchexdec($s1), bchexdec($s2)
));
哪些产出:

1688c21f60a767de24dc52f1a2e00cd85c4074d992f7d0201059464c7

这些数字对于PHP的整数数据类型来说太大了。具有扩展名,并且,您可以使用以下代码:

$s1='f452f5a90e5dc303ab2b1ed139d90782fe98f0694f8c7bf88cade835';
$s2='74392c4cfc18badea29a1048f427c602c56e5d2fdff0860878e67c92';

$sum = hexdec($s1)+hexdec($s2);
$sum1 = dechex ($sum);

echo $sum."<br>";
echo $sum1;
function bchexdec($hex) {
    if(strlen($hex) == 1) {
        return hexdec($hex);
    } else {
        $remain = substr($hex, 0, -1);
        $last = substr($hex, -1);
        return bcadd(bcmul(16, bchexdec($remain)), hexdec($last));
    }
}

function bcdechex($dec) {
    $last = bcmod($dec, 16);
    $remain = bcdiv(bcsub($dec, $last), 16);

    if($remain == 0) {
        return dechex($last);
    } else {
        return bcdechex($remain).dechex($last);
    }
}

$s1='f452f5a90e5dc303ab2b1ed139d90782fe98f0694f8c7bf88cade835';
$s2='74392c4cfc18badea29a1048f427c602c56e5d2fdff0860878e67c92';

echo bcdechex(bcadd(
    bchexdec($s1), bchexdec($s2)
));
哪些产出:

1688c21f60a767de24dc52f1a2e00cd85c4074d992f7d0201059464c7
移植到PHP:

$ndigits=max(strlen($s1),strlen($s2));
而(strlen($s1)<$ndigits)$s1=“0$s1”;
而(strlen($s2)<$ndigits)$s2=“0$s2”;
$carry=0;
$result=“”;
对于($i=$ndigits-1;$i>=0;$i--){
$d=hexdec(substr($s1,$i,1))+hexdec(substr($s2,$i,1))+$carry;
$carry=$d>>4;
$result=dechex($d&15)。$result;
}
如果($carry!=0)$result=dechex($carry)$结果;
在上测试。

移植到PHP:

$ndigits=max(strlen($s1),strlen($s2));
而(strlen($s1)<$ndigits)$s1=“0$s1”;
而(strlen($s2)<$ndigits)$s2=“0$s2”;
$carry=0;
$result=“”;
对于($i=$ndigits-1;$i>=0;$i--){
$d=hexdec(substr($s1,$i,1))+hexdec(substr($s2,$i,1))+$carry;
$carry=$d>>4;
$result=dechex($d&15)。$result;
}
如果($carry!=0)$result=dechex($carry)$结果;

在上测试。

您将需要手动计算,使用与在纸上计算相同的操作(将5和2相加得到7。将9和3相加得到c。将8和c相加得到4,携带1…)使用JavaScript而不是PHP提出基本相同的问题。它的答案也应该适用于这里。在一个程序中我应该如何做到这一点?我需要添加两个字符串的对应字符吗?也许这个链接可以帮助您手动计算,使用与在纸上计算相同的操作(添加5和2得到7。添加9和3得到c。添加8和c得到4,携带1…)使用JavaScript而不是PHP问本质上相同的问题。它的答案也应该适用于这里。在一个程序中我应该如何做到这一点?我需要添加两个字符串的对应字符吗?也许这个链接可以帮助您