php 是否支持位操作,我来求个 PHP 32 位与 64 位 按位异或 操作的问题.....

该博客探讨了在不同位数系统下实现CRC32校验时出现的结果不一致问题,主要关注PHP中字符串编码转换和CRC32计算的细节。作者通过`mb_substr`和`mb_check_encoding`函数处理UTF-8字符,并尝试使用`mb_convert_encoding`进行编码转换,但仍然遇到32位和64位系统下结果不同的挑战。博客寻求解决方案,重点关注确保在32位系统上的正确结果。
摘要由CSDN通过智能技术生成

function t_charCodeAt($str, $index){

$char = mb_substr($str, $index, 1, 'UTF-8');

if (mb_check_encoding($char, 'UTF-8')) {

$ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');

return hexdec(bin2hex($ret));

} else {

return null;

}

}

function t_crc32($g){

$g = urlencode($g);

$e = array();

for ($f = 0; $f < 256; $f++) {

$c = $f;

for ($d = 0; $d < 8; $d++) {

$c = ($c & 1) ? (($c >> 1) & 2147483647) ^ 3988292384 : (($c >> 1) & 2147483647);

}

$e[$f] = $c;

}

for ($f = 0, $c = 4294967295; $f < strlen($g); $f++) {

$c = (($c >> 8) & 16777215) ^ $e[($c & 255) ^ t_charCodeAt($g, $f)];

}

$c ^= 4294967295; // 32位和64位结果不一致,求解决办法!正确结果应该以32位为例!

$prefix = (!is_numeric(substr($c >> 3, 0, 1))) ? substr($c >> 3, 0, 1) : '';

echo $prefix.base_convert($c >> 3, 10, 16);

}

t_crc32('1029409')."\n";

t_crc32('1549058');

32位和64位结果不一致,求解决办法!正确结果应该以32位为例!

:(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值