加密(Crc16)

方法二:结果为10268
const
Crc16Tab: Array[0..$FF] of Word =
    ($00000, $01021, $02042, $03063, $04084, $050a5, $060c6, $070e7,
    $08108, $09129, $0a14a, $0b16b, $0c18c, $0d1ad, $0e1ce, $0f1ef,
    $01231, $00210, $03273, $02252, $052b5, $04294, $072f7, $062d6,
    $09339, $08318, $0b37b, $0a35a, $0d3bd, $0c39c, $0f3ff, $0e3de,
    $02462, $03443, $00420, $01401, $064e6, $074c7, $044a4, $05485,
    $0a56a, $0b54b, $08528, $09509, $0e5ee, $0f5cf, $0c5ac, $0d58d,
    $03653, $02672, $01611, $00630, $076d7, $066f6, $05695, $046b4,
    $0b75b, $0a77a, $09719, $08738, $0f7df, $0e7fe, $0d79d, $0c7bc,
    $048c4, $058e5, $06886, $078a7, $00840, $01861, $02802, $03823,
    $0c9cc, $0d9ed, $0e98e, $0f9af, $08948, $09969, $0a90a, $0b92b,
    $05af5, $04ad4, $07ab7, $06a96, $01a71, $00a50, $03a33, $02a12,
    $0dbfd, $0cbdc, $0fbbf, $0eb9e, $09b79, $08b58, $0bb3b, $0ab1a,
    $06ca6, $07c87, $04ce4, $05cc5, $02c22, $03c03, $00c60, $01c41,
    $0edae, $0fd8f, $0cdec, $0ddcd, $0ad2a, $0bd0b, $08d68, $09d49,
    $07e97, $06eb6, $05ed5, $04ef4, $03e13, $02e32, $01e51, $00e70,
    $0ff9f, $0efbe, $0dfdd, $0cffc, $0bf1b, $0af3a, $09f59, $08f78,
    $09188, $081a9, $0b1ca, $0a1eb, $0d10c, $0c12d, $0f14e, $0e16f,
    $01080, $000a1, $030c2, $020e3, $05004, $04025, $07046, $06067,
    $083b9, $09398, $0a3fb, $0b3da, $0c33d, $0d31c, $0e37f, $0f35e,
    $002b1, $01290, $022f3, $032d2, $04235, $05214, $06277, $07256,
    $0b5ea, $0a5cb, $095a8, $08589, $0f56e, $0e54f, $0d52c, $0c50d,
    $034e2, $024c3, $014a0, $00481, $07466, $06447, $05424, $04405,
    $0a7db, $0b7fa, $08799, $097b8, $0e75f, $0f77e, $0c71d, $0d73c,
    $026d3, $036f2, $00691, $016b0, $06657, $07676, $04615, $05634,
    $0d94c, $0c96d, $0f90e, $0e92f, $099c8, $089e9, $0b98a, $0a9ab,
    $05844, $04865, $07806, $06827, $018c0, $008e1, $03882, $028a3,
    $0cb7d, $0db5c, $0eb3f, $0fb1e, $08bf9, $09bd8, $0abbb, $0bb9a,
    $04a75, $05a54, $06a37, $07a16, $00af1, $01ad0, $02ab3, $03a92,
    $0fd2e, $0ed0f, $0dd6c, $0cd4d, $0bdaa, $0ad8b, $09de8, $08dc9,
    $07c26, $06c07, $05c64, $04c45, $03ca2, $02c83, $01ce0, $00cc1,
    $0ef1f, $0ff3e, $0cf5d, $0df7c, $0af9b, $0bfba, $08fd9, $09ff8,
    $06e17, $07e36, $04e55, $05e74, $02e93, $03eb2, $00ed1, $01ef0);


function UpdateCRC16(InitCRC: Word; var Buffer;
                    Length: {$IFDEF Win32} LongInt {$ELSE} Word {$ENDIF}): Word;
begin
  asm
  {$IFDEF Win32}
        push  esi
        push  edi
        push  eax
        push  ebx
        push  ecx
        push  edx
        lea    edi, Crc16Tab
        mov    esi, Buffer
        mov    ax, InitCrc
        mov    ecx, Length
        or    ecx, ecx
        jz    @@done
@@loop:
        xor    ebx, ebx
        mov    bl, ah
        mov    ah, al
        lodsb
        shl    bx, 1
        add    ebx, edi
        xor    ax, [ebx]
        loop  @@loop
@@done:
        mov    Result, ax
        pop    edx
        pop    ecx
        pop    ebx
        pop    eax
        pop    edi
        pop    esi
  {$ELSE}
        lea    di, Crc16Tab
        push  ds
        pop    es
        push  ds
        lds    si, Buffer
        mov    ax, InitCrc
        mov    cx, Length
        or    cx, cx
        jz    @@done
@@loop:
        xor    bx, bx
        mov    bl, ah
        mov    ah, al
        lodsb
        shl    bx, 1
        xor    ax, es:[di + bx]
        loop  @@loop
        pop    ds
@@done:
        mov    Result, ax
  {$ENDIF}
  end;
end;


begin
   source := 'abc';
   crc := 0;
   crc := UpdateCrc16(0, source, 3);
   Label4.Caption := IntToStr(crc);//10268`
end;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值