我试图将此Python代码转换为PHP,但我在处理字节数据时卡住了。谁能帮我修改一下这个PHP代码,这样我就可以得到和Python一样的结果,也就是2734?
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)
#result 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;
#result 2047
1条答案
按热度按时间ctehm74n1#
Python代码将每个字符视为一个单独的实体,并接受其ASCII值。PHP代码将十六进制字符串转换为它的二进制表示,然后尝试将其作为数组引用。我会先将其拆分为单个字符的数组,然后将每个字符Map到它们的ASCII值。然后使用
$indexes
中的数字作为要添加的值的索引:或者你可以将
$indexes
中的每个值Map到$sha_1_b
中的相关索引,然后对得到的Map数组求和:您还可以使用PHP很少使用的字符串作为数组特性,它允许您通过数组语法引用字符串中的字符。不过我并不喜欢这种表示法,因为其他人看你的代码时可能会感到困惑,他们可能会认为引用是一个数组,而实际上它是一个字符串:
或者,超级简短的版本: