You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中getBytes()转PHP实现时BigInteger计算结果不一致如何解决

实现逻辑说明

你当前运行结果不一致的核心原因是对两边的BigInteger构造逻辑以及Java getBytes()的作用理解有误:

  1. Java代码中a.getBytes()是将字符串"4F23DE12"的每个字符按编码转成字节序列,而非把字符串当作十六进制值转换,你调试时看到的[B@6d06d69c是Java字节数组对象的默认toString输出,仅代表对象标识,和字节内容无关。
  2. 原PHP代码直接将字符串传入BigInteger,默认按十进制解析,遇到字符F就会截断,最终只返回开头的数字4,所以结果错误。
正确PHP实现

Java中这段代码的逻辑等价于:把字符串的每个ASCII字节按大端序拼接为二进制串,再转成大整数,PHP可以通过bin2hex先获取字节对应的十六进制串,再初始化BigInteger即可:

use phpseclib3\Math\BigInteger;

$a = "4F23DE12";
// 将字符串的字节序列转为十六进制表示
$hexStr = bin2hex($a);
// 按十六进制初始化大整数
$b = new BigInteger($hexStr, 16);
echo $b; // 输出结果:3766753334112104754

内容的提问来源于stack exchange,提问作者Ayomikun Samuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 01:54:09