首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRC-16/KERMIT实现

CRC-16/KERMIT实现
EN

Stack Overflow用户
提问于 2019-03-09 19:14:23
回答 1查看 252关注 0票数 0

我使用以下函数来计算CRC。

代码语言:javascript
复制
function crc16_kermit($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 ) ^ 0x8408 ); 
             else                             $crc =    $crc >> 1; 
          } 
       } 

       $lb  = ($crc & 0xff00) >> 8; 
       $hb  = ($crc & 0x00ff) << 8; 
       $crc = $hb | $lb; 

       return $crc; 
    }

但它并没有像预期的那样显示结果。也就是说,从这个函数中,我得到了十六进制值'6c20536574696f20322c31‘的CRC为'2DE3’。但我需要将其命名为“EB3E”。我检查了'https://crccalc.com/‘中的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-10 10:26:12

您的代码很好。你的测试是错的。您没有将6c20...转换为二进制。2de3是该ASCII码数字和字母串的循环冗余校验。如果你把它转换成二进制,那么你就会得到eb3e

但请注意,由于某些原因,例程的最后三行会颠倒字节。所以你会得到3eeb

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55076752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档