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

Python转PHP字节字符串转换遇阻,求修正代码获一致结果2734

问题:Python转PHP时字节处理导致校验和结果不一致

尝试将以下Python代码转换为PHP时,处理字节数据出现问题:PHP代码运行结果为2047,而Python代码的结果是2734,需要修正PHP代码以得到一致结果。

Python 代码

indexes = [8, 13, 23, 13, 37, 23, 31, 11, 8, 37, 23, 27, 12, 9, 21, 20, 6, 8, 12, 16, 12, 17, 35, 37, 35, 28, 13, 35, 9, 31, 2, 25]
sha_1_sign = 'cf493b66e356e588c545df7dda24ed4d404f1c90'
sha_1_b = sha_1_sign.encode("ascii")
checksum = sum([sha_1_b[number] for number in indexes])
print(checksum)
# 结果:2734

原PHP代码(结果不符)

$indexes = [8, 13, 23, 13, 37, 23, 31, 11, 8, 37, 23, 27, 12, 9, 21, 20, 6, 8, 12, 16, 12, 17, 35, 37, 35, 28, 13, 35, 9, 31, 2, 25];
$sha_1_sign = 'cf493b66e356e588c545df7dda24ed4d404f1c90';
$sha_1_b = hex2bin($sha_1_sign);  
$checksum = 0;
foreach ($indexes as $number) {
    if (isset($sha_1_b[$number])) {
        $checksum += ord($sha_1_b[$number]);
    }
}
echo $checksum; 
# 结果:2047

错误原因

Python中sha_1_sign.encode("ascii")的作用是将字符串每个字符转换为对应的ASCII字节值(例如字符'c'的ASCII码是99,'f'是102);而PHP里的hex2bin($sha_1_sign)是把十六进制字符串解码为二进制数据(例如把'cf'解码为单个字节0xCF,对应十进制207),两者逻辑完全不同,这就是结果差异的核心原因。

修正后的PHP代码

$indexes = [8, 13, 23, 13, 37, 23, 31, 11, 8, 37, 23, 27, 12, 9, 21, 20, 6, 8, 12, 16, 12, 17, 35, 37, 35, 28, 13, 35, 9, 31, 2, 25];
$sha_1_sign = 'cf493b66e356e588c545df7dda24ed4d404f1c90';
$checksum = 0;
foreach ($indexes as $number) {
    // 直接按索引访问原字符串的单个字符
    if (isset($sha_1_sign[$number])) {
        $checksum += ord($sha_1_sign[$number]);
    }
}
echo $checksum; 
// 结果:2734

说明

修正后的代码直接使用原字符串$sha_1_sign,通过下标访问对应位置的字符,用ord()获取其ASCII值并累加,和Python的逻辑完全一致,因此能得到相同的2734结果。

内容的提问来源于stack exchange,提问作者Mihai Galan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:22:49