2009-02-03 4 views

답변

0

CRC8이어야합니까?

PHP.net에는 CRC16과 네이티브 버전 CRC32의 간단한 구현이 있습니다.

CRC8 일 필요가 있다면 Marius가 지적한 위키피디아 페이지의 sudo 코드에서 코딩하는 것이 좋습니다.

0
function crcnifull ($dato, $byte) 
{ 
    static $PolyFull=0x8c; 

    for ($i=0; $i<8; $i++) 
    { 
    $x=$byte&1; 
    $byte>>=1; 
    if ($dato&1) $byte|=0x80; 
    if ($x) $byte^=$PolyFull; 
    $dato>>=1; 
    } 
    return $byte; 
} 

function crc8 (array $ar,$n=false) 
{ 
    if ($n===false) $n=count($ar); 
    $crcbyte=0; 
    for ($i=0; $i<$n; $i++) $crcbyte=crcnifull($ar[$i], $crcbyte); 
    return $crcbyte; 
} 

이진 문자열에이 함수를 사용하려면 먼저 이진 문자열을 배열로 변환해야합니다. 즉 다음과 같이 얻을 수있다 :

$crc8=crc8(sbin2ar($packet)); 
+0

밥, 당신의 코드가 "D $ 1I 2006년 11월 14일 18시 15분 작동하지 않습니다 :

function sbin2ar($sbin) { $ar=array(); $ll=strlen($sbin); for ($i=0; $i<$ll; $i++) $ar[]=ord(substr($sbin,$i,1)); return $ar; } 

예 어떻게 모든 일을 사용할 수 : 00 1634146 3772376 3772344 3772312 3772294 1 * "문자열. 귀하의 계산에 따라, 그 예제에 대한 crc8 계산은 57을 주어야 할 때 결과 28을 부여합니다. 당신이 여전히이 스레드를 따르고 있기를 바랍니다. 이것 좀 봐 주시겠습니까? –

+0

Bob은 방금 참조를 추가하지 않고 [Pastebin] (http://pastebin.com/qypDLF5W)에서 그의 코드를 얻었으므로 고정 될 것입니다. – GolezTrol