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

请问这个 crc 16 的java代码如何转换成php的

程序员文章站 2022-05-06 12:57:12
...
请问这个 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 >> 8) | (crc > 4);			crc ^= (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 > 4); $crc ^= ($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 运行的几组结果


$str2='AQEBAQEB';
$str2=base64_decode($str2);
java 得到的 结果是 8357
php 得到的结果是 33653

> 8) & 0xff)  | ($crc > 4);		$crc ^= ($crc   

为什么要 $str2=base64_decode($str2);
java 里也做了 base64 编码了吗?

让你多给几组,为何只给一组呢?

谢谢已经搞好了