• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphicrc校验函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

function CalCRC16(AData: array of Byte; AStart, AEnd: Integer): string;
const
  GENP=$8408;  //多项式公式X16+X15+X2+1(1100 0000 0000 0101)  //$A001
var
  crc:Word;
  i:Integer;
  tmp:Byte;
  s:string;
procedure CalOneByte(AByte:Byte);  //计算1个字节的校验码
var
j:Integer;
begin
  crc:=crc xor AByte;   //将数据与CRC寄存器的低8位进行异或
  for j:=0 to 7 do      //对每一位进行校验
  begin
    tmp:=crc and 1;        //取出最低位
    crc:=crc shr 1;        //寄存器向右移一位
    crc:=crc and $7FFF;    //将最高位置0
    if tmp=1 then         //检测移出的位,如果为1,那么与多项式异或
      crc:=crc xor GENP;
      crc:=crc and $FFFF;
  end;
end;
begin
  crc:=$FFFF;             //将余数设定为FFFF
  for i:=AStart to AEnd do   //对每一个字节进行校验
    CalOneByte(AData[i]);
  s:=inttohex(crc,2);
  Result:= rightstr(s,2)+leftstr(s,2);
end;

 

转换函数


function TForm1.strtocrc(s: string): string;
var
  buf1:array[0..256] of byte;
  i:integer;
  strOrder:string;
  Res: string;
begin
  strOrder :=StringReplace(s,' ','',[rfReplaceAll]);
  for i:=0 to (length(strOrder) div 2-1) do
    buf1[i]:= HexToInt1(copy(strOrder, i*2 + 1,2));
  result:=s+CalCRC16(buf1,Low(buf1),length(strOrder) div 2-1);
end;


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab中的实时音频发布时间:2022-07-18
下一篇:
delphi按位运算notandorxorshlshr发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap