您的位置:首页 > 编程语言

CRC16校验代码

2012-06-15 10:00 363 查看
function CRC16(Data: string): string;
var
I, Len, CRC: Word;
pData: PChar;
begin
CRC := 0;
Len := Length(Data);
pData := PChar(Data);

while Len > 0 do
begin
CRC := CRC xor (Word(pData^) shl 8);
Inc(pData);
I := 8;
repeat
if CRC and $8000 > 0 then
CRC := (CRC shl 1) xor $1021
else
CRC := CRC shl 1;
Dec(I);
until I = 0;
Dec(Len);
end;
Result := IntToHex(CRC, 4);
end;
/*****************************************************************************************
Function:    CalcCRC
Description: 计算CRC
Calls:       无
Called By:   无
Input:       数据串指针pui16_Data,数据长度ui16_lenth
Output:      无
Return:      16位CRC
Others:      无
Auther:
Time:        2005-7-8
*****************************************************************************************/
UI16 CalcCRC(UI8 *pui16_Data, UI16 ui16_lenth)
{
UI8 i;
UI16 crc=0;
UI16 lenth;

lenth=ui16_lenth;
while(lenth)
{
crc = crc ^ ((UI16)(*pui16_Data++) << 8);
i=8;
do
{
if (crc & 0x8000)
{
crc = (crc << 1) ^ 0x1021;
}
else
{
crc <<= 1;
}
} while(--i);
lenth--;
}
return (crc);
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: