欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

请教这个 crc 16 的java代码怎么转换成php的

程序员文章站 2022-05-17 18:26:17
...
请问这个 crc 16 的java代码如何转换成php的
本帖最后由 oelenson 于 2014-06-21 12:49:27 编辑 请问这个 crc 16 的java代码如何转换成php的,自己用php 转的代码不对

$str2='AQEBAQEB';
$str2=base64_decode($str2);


java 代码

public static int CRC16(final byte[] buffer) {
int crc = 0xffff;

for (int i = 0; i crc = ((crc >>> 8) | (crc crc ^= (buffer[i] & 0xff);
crc ^= ((crc & 0xff) >> 4);
crc ^= (crc crc ^= ((crc & 0xff) }
crc &= 0xffff;

return crc;
}

function uRShift($a, $b)
{
if($b == 0) return $a;
return ($a >> $b) & ~(1>($b-1));
}



function crc16($buffer) {
$crc = 0xffff;
for ($i = 0; $i $crc = ((uRShift($crc,8)) | ($crc $crc ^= ($buffer[$i] & 0xff);
$crc ^= (($crc & 0xff) >> 4);
$crc ^= ($crc $crc ^= (($crc & 0xff) }
$crc &= 0xffff;

return $crc;
}

------解决方案--------------------
java 的 >>> (左补0右移) 在 php 中不需特殊处理,可直接 >>
至多将 (crc >>> 8) 译为 (($crc >> 8) & 0xff)

java 的 byte[] 类型,没有对应的 php 数据类型
你可以逐字节取内码 ord($buffer[$i])
也可以一进函数就 $buffer = array_values(unpack('C', $buffer));
unpack('C', $buffer) 返回的数组是从下标 1 开始的,所以要 array_values 整理一下
如果用 foreach 循环,或 for 循环从 1 开始就不需要整理了

其他应该没什么了

如果觉得还有问题,请给出 java 运行的几组结果
请教这个 crc 16 的java代码怎么转换成php的

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • 请教这个 crc 16 的java代码怎么转换成php的
  • 专题推荐