PHP CRC отличается от Java CRC

Я пытаюсь сделать CRC16 в PHP и получить те же результаты, что и в Java.

Некоторые критерии для CRC16

  1. полином 8005
  2. начальный остаток от 0
  3. окончательное значение XOR 0
  4. ни вход, ни выход не отражаются

В Java я передаю 5-байтовое сообщение, содержащее значения 1,2,3,4,5, и я получаю значение 0xB059.

JAVA CODE

package crc;
public class Crc {
public static void main(String[] args) {

char crc = 0X0000;
char temp = 0X0000;
char[] data = new char[5];
data[0]=1;data[1]=2;data[2]=3;data[3]=4;data[4]=5;
for(int i=0; i<data.length; i++){
char value = (char)data[i];

temp =(char)(value ^(char)(crc >> 8));
temp =(char)(temp ^(char)(temp >> 4));
temp =(char)(temp ^(char)(temp >> 2));
temp =(char)(temp ^(char)(temp >> 1));
crc = (char)((char)(crc << 8) ^ (char)(temp<<15)^(char)(temp << 2)^temp);
}
System.out.println(crc);
}
}

PHP-код

 function crc16($str){
$crc  = 0X0000;
$temp = 0X0000;
$length = strlen($str);

$data = unpack("C*", $str);
for($i=0;$i<($length);$i++){
$value = $data[$i];

$temp = ($value ^($crc >> 8));
$temp = ($temp ^($temp >> 4));
$temp = ($temp ^($temp >> 2));
$temp = ($temp ^($temp >> 1));
$crc  = (($crc << 8) ^ ($temp<<15)^($temp << 2)^$temp);

}
return $crc;
}

echo crc16("\x01\x02\x03\x04\x05");

Взял этот код и преобразовал его в PHP, и не повезло. Если у кого-то есть какое-либо руководство, которое может помочь, это было бы здорово.

Спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]