Java中getBytes()转PHP实现时BigInteger计算结果不一致如何解决
实现逻辑说明
你当前运行结果不一致的核心原因是对两边的BigInteger构造逻辑以及Java getBytes()的作用理解有误:
- Java代码中
a.getBytes()是将字符串"4F23DE12"的每个字符按编码转成字节序列,而非把字符串当作十六进制值转换,你调试时看到的[B@6d06d69c是Java字节数组对象的默认toString输出,仅代表对象标识,和字节内容无关。 - 原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
相关产品推荐
相关产品推荐

