向设备发送数据,需要crc的16位校验码,google了半天,没发现有Php写的crc16代码。
php自带了crc32()函数,只能生成32位的校验码,但是我需要16位的校验码,因为设备只认识16位的校验码。
环境是UBUNTU+APACHE2+PHP5+MYSQL5+ADODB.
如果有其他语言写的CRC 16算法,比如VB写的,我用php怎样调用可以使其生成16位校验码并返回到php?

解决方案 »

  1.   

    这个是你要的吗?
    http://www.lammertbies.nl/forum/viewtopic.php?t=1005如果是其他语言写的,你可以把它变成可执行的文件,然后在php中用system函数调用这个程序取得返回值。
      

  2.   

     function crc16($string,$crc=0) {    for ( $x=0; $x<strlen( $string ); $x++ ) {        $crc = $crc ^ ord( $string[$x] );
            for ($y = 0; $y < 8; $y++) {            if ( ($crc & 0x0001) == 0x0001 ) $crc = ( ($crc >> 1 ) ^ 0xA001 );
                else                             $crc =    $crc >> 1;
            }
        }    return $crc;
    }