2
擴大,並給予解釋,即也可以去上面貼的鏈接,這裏是一個PHP函數得到一個CRC16校驗字符串數據:定製CRC16有位反射
function crc16($data) {
$crc = 0xAC6F;
$len = strlen($data);
$i = 0;
while ($len--) {
$crc ^= reversebyte(ord($data[$i++])) << 8;
$crc &= 0xffff;
for ($j = 0; $j < 8; $j++){
$crc = ($crc & 0x8000) ? ($crc << 1)^0x8005 : $crc << 1;
$crc &= 0xffff;
}
}
$crc ^= 0x0000;
$crc = reversebits($crc);
return $crc;
}
function reversebyte($byte) {
$ob = 0;
$b = (1 << 7);
for ($i = 0; $i <= 7; $i++) {
if (($byte & $b) !== 0) {
$ob |= (1 << $i);
}
$b >>= 1;
}
return $ob;
}
function reversebits($cc) {
$ob = 0;
$b = (1 << 15);
for ($i = 0; $i <= 15; $i++) {
if (($cc & $b) !== 0) {
$ob |= (1 << $i);
}
$b >>= 1;
}
return $ob;
}
Poly = 0x8005
Init = 0xAC6F
Xor = 0x0000
Refin = True
Refout = True
如果你不這樣做要添加反射,然後替換功能CRC16)這些行(:
更換REFIN = TRUE:
$crc ^= reversebyte(ord($data[$i++])) << 8;
隨着REFIN =假:
$crc ^= ord($data[$i++]) << 8;
更換REFOUT = TRUE:
$crc = reversebits($crc);
與REFOUT =假(刪除該整行):
$crc = reversebits($crc); //remove me
由於您沒有努力自己解決問題 - 您的預算是多少? – h2ooooooo
你有任何例子他們應該輸出,如果他們校驗和正確?如果是這樣,請將其添加到OP中。 ('foo'給出'xxx','bar'給出'yyy') – h2ooooooo
你還可以查看哪些設置會給出正確的結果嗎? http://www.zorc.breitbandkatze.de/crc.html據我所知,根據你所說的,他們都不應該給出正確的結果。 – h2ooooooo