webmaster_Chris
Новичок
Что имеем... Формула расчета CRC (18 байт)
и имеем строку 410356896034060161456900000000000000 у которой crc 41, или 410356895038776798456800000000000000 у которой сrc 07....
Если строку передаем так:
или вот так:
то получается неверное значение, но если передать:
то все хорошо... Где я программно не верно дописываю эти \x, или как правильнео расчитать без них?... Может функция строковая тогда должна использоваться не ord?
PHP:
function crc($bytes)
{
$r = 0x3B;
// исходя вот из этого void CRC (byte) {GPRS_CRC+=0x56^byte; GPRS_CRC++; GPRS_CRC^=0xC5+byte; GPRS_CRC--;}
for($i = 0; $i < strlen($bytes); $i++)
{
print $i." - ".$bytes[$i]."\n";
$r += 0x56 ^ ord($bytes[$i]);
$r++;
$r ^= 0xC5 + ord($bytes[$i]);
$r--;
}
return $r & 0xFF;
}
Если строку передаем так:
PHP:
printf('%02x', crc("410356896034060161456900000000000000"));
PHP:
$query = "41035689603406016145690000000000000041";
$query = "\x".$hex[0]."\x".$hex[1]."\x".$hex[2]."\x".$hex[3]."\x".$hex[4]."\x".$hex[5]."\x".$hex[6]."\x".$hex[7]."\x".$hex[8]."\x".$hex[9]."\x".$hex[10]."\x".$hex[11]."\x".$hex[12]."\x".$hex[13]."\x".$hex[14]."\x".$hex[15]."\x".$hex[16]."\x".$hex[17];
PHP:
printf('%02x', crc("\x41\x03\x56\x89\x60\x34\x06\x01\x61\x45\x69\x00\x00\x00\x00\x00\x00\x00"));