Я пытаюсь сделать CRC16 в PHP и получить те же результаты, что и в Java.
Некоторые критерии для CRC16
В 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, и не повезло. Если у кого-то есть какое-либо руководство, которое может помочь, это было бы здорово.
Спасибо
Задача ещё не решена.
Других решений пока нет …