CRC-CCITT (0xFFFF) delphi实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRC-CCITT (0xFFFF) delphi实现相关的知识,希望对你有一定的参考价值。

由于要和java的服务沟通,最终确定要实现的是:

width=16

poly=0x1021

init=0xffff

refin=false

refout=false

xorout=0x0000

check=0x29b1

residue=0x0000

name="CRC-16/CCITT-FALSE"

 

网络找了很多,结果结果对不上

下载了工具,都不是想要的,最终找到校验在线网址:

 

https://www.lammertbies.nl/comm/info/crc-calculation.html

 

 

实现代码:

function CRC16_CCITT_0xFFFF(bytes: TBytes): Word;
const
polynomial = $1021;
var
crc: Word;
I, J: Integer;
b: Byte;
bit, c15: Boolean;
begin
crc := $FFFF; // initial value
for I := 0 to High(bytes) do
begin
b := bytes[I];
for J := 0 to 7 do
begin
bit := (((b shr (7-J)) and 1) = 1);
c15 := (((crc shr 15) and 1) = 1);
crc := crc shl 1;
if (c15 xor bit) then crc := crc xor polynomial;
end;
end;

Result := crc and $ffff;
end;

 

当然如果字符串过长,则需要查表法实现,

https://www.libcrc.org/download/

给了c的实现。

以上是关于CRC-CCITT (0xFFFF) delphi实现的主要内容,如果未能解决你的问题,请参考以下文章

基于Verilog的CRC-CCITT校验

求VHDL的查表法计算16位CRC-CCITT 。

无法执行 dex:方法 ID 不在 [0, 0xffff] 中:65536

为啥我不能把 0xffff 放到 java 中的短

intelx86为何从0xFFFF0处执行

JAVA支持的最大字体号是0xFFFF(65535)