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的实现。

时间: 2024-07-30 12:52:47

CRC-CCITT (0xFFFF) delphi实现的相关文章

ccitt crc16

CCITT CRC-16计算原理与实现 (2010-04-01 13:18:52)转载▼ 标签: 杂谈 CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制.实际上,除数据通信外,CRC在其它很多领域也是大有用武之地的.例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到"Bad CRC"错误,由此它在数据存储方面的应用可略见一斑. 差错控制理论是在

VB下的CRC校验程序

随着计算机技术的不断发展,在现代工业中,利用微机进行数据通讯的工业控制 应用得也越来越广泛.由于传输距离.现场状况等诸多可能出现的因素影响,计算机与受控设备之间的 通讯数据常会发生无法预测的错误.为了防止错误所带来的影响,一般在通讯时 采取数据校验的办法,而循环冗余码校验是最常用的校验方法之一.在实际使用 的各种现场总线协议中,数据帧的校验一般都采用这种检验方式. 一. 循环冗余码校验原理 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利 用除法及余

CRC循环冗余校验码总结(转)

转自 http://blog.csdn.net/u012993936/article/details/45337069 一.CRC简介 先在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting)的.实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较, 若两个CRC值不同,则说明数据通讯出现错误 那么其实

CRC循环冗余校验码总结

一.CRC简介 先在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting)的.实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误 那么其实CRC有比较多种,比如CRC16.CRC32 ,为什么叫16.32呢.在这里并非与位有和关系.而是由所确定的多项式最高次幂

CRC-16的原理和实现

CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制.实际上,除 数据通信外,CRC在其它很多领域也是大有用武之地的.例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑. 差错控制理论是在代数理论基础上建立起来的.这里我们着眼于介绍CRC的算法与实现,对原理只能捎带说明一下.若需要进一步了解线性码.

模拟Modbus协议问题

问题: 在嵌入式系统开发中,Modbus协议是工业控制系统中广泛应用的一种协议.本题用来简单模拟Modbus协议,只需根据条件生成符合该协议的数据帧,并解析所获取的数据.假设设备使用的协议发送数据格式如下:<SlaveAddress, 1 Byte> <Function, 1 Byte> <Start Address, 2 Bytes> <NumberofBytes, 2 Bytes> <Checksum, 2 Bytes>其中前四项将在输入条件

校验算法专辑

由于最近一直在接触公司的通讯协议,包括基于HTTP协议.SOCKET.串口通讯协议封装的PUSH.PULL通信协议SDK. 通讯协议无可避免的需要校验,想想以前在B公司自己定制的通讯协议连校验的算法都木有,简直low到不行,如此,问题来了, 主流的通讯协议校验算法都有哪些? 于是这篇文章就应运而生了: 首先,比较常用的算法有: 一.奇偶校验: 1. 定义 根据被传输的一组二进制代码中"1"的个数是奇数或偶数来进行校验. 使用:通常专门设置一个奇偶校验位,存放代码中"1&quo

几种常见ECG数据格式及对比

SCP.DICOM.HL7aECG.GDF格式及对比 本文档首先给出SCP.DICOM.HL7aECG.GDF四种心电信号格式的具体数据结构,然后分析其各自的特点及适用范围. 一.SCP-ECG format 这种格式是专门针对ECG数据的标准格式,其中包含了ECG数据波形,患者信息, ECG采集信息以及测量诊断信息等丰富内容. SCP-ECG格式主要分为Title(2 bytes for CRC-checksum and 4 bytes for size of ECG record)和Sect

CRC16算法之一:CRC16-CCITT-FALSE算法的java实现

CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CRC16-CCITT-MODBUS算法的java实现 前言 JDK里包含了CRC32的算法,但是没有CRC16的,网上搜了一堆没有找到想要的,索性自己实现 注意:CRC16算法分为很多种,本篇文章中,只讲其中的一种:CRC16-CCITT-FALSE算法 CRC16算法系列之一:CRC16-CCITT