在PHP中添加大型十六进制字符串
我需要在PHP中添加两个十六进制字符串,并将结果作为十六进制字符串返回。我目前正在使用以下代码:在PHP中添加大型十六进制字符串,php,math,hex,Php,Math,Hex,我需要在PHP中添加两个十六进制字符串,并将结果作为十六进制字符串返回。我目前正在使用以下代码: $s1='f452f5a90e5dc303ab2b1ed139d90782fe98f0694f8c7bf88cade835'; $s2='74392c4cfc18badea29a1048f427c602c56e5d2fdff0860878e67c92'; $sum = hexdec($s1)+hexdec($s2); $sum1 = dechex ($sum); echo $sum."<b
$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问本质上相同的问题。它的答案也应该适用于这里。在一个程序中我应该如何做到这一点?我需要添加两个字符串的对应字符吗?也许这个链接可以帮助您