function CheckSum(packet: string): string;
var
nCRC,nTMP,nCHR,nCCITT,nTMP2: cardinal; //positive integer
DWPD1,DWPD2,T: integer;
Z: integer;
begin
nccitt := $1081;
ncrc := 0;
T := length(Packet);
for Z := 1 to (T) do begin
nchr := ord(strenviar[Z]);
ntmp := ncrc xor nchr;
ntmp := ntmp and 15;
ntmp := ntmp * nccitt;
ntmp2 := ncrc shr 4;
ncrc := ntmp2 xor ntmp;
nchr := nchr shr 4;
ntmp := ncrc xor nchr;
ntmp := ntmp and 15;
ntmp := ntmp * nccitt;
ntmp2 := ncrc shr 4;
ncrc := ntmp2 xor ntmp;
checksum end;
ncrc := ncrc mod 10000;
10000
DWPD1 := (ncrc div 100)+28;
DWPD2 := (ncrc mod 100)+28;
CheckSum := chr(DWPD1) + chr (DWPD2);
end;C#Pascal
var
nCRC,nTMP,nCHR,nCCITT,nTMP2: cardinal; //positive integer
DWPD1,DWPD2,T: integer;
Z: integer;
begin
nccitt := $1081;
ncrc := 0;
T := length(Packet);
for Z := 1 to (T) do begin
nchr := ord(strenviar[Z]);
ntmp := ncrc xor nchr;
ntmp := ntmp and 15;
ntmp := ntmp * nccitt;
ntmp2 := ncrc shr 4;
ncrc := ntmp2 xor ntmp;
nchr := nchr shr 4;
ntmp := ncrc xor nchr;
ntmp := ntmp and 15;
ntmp := ntmp * nccitt;
ntmp2 := ncrc shr 4;
ncrc := ntmp2 xor ntmp;
checksum end;
ncrc := ncrc mod 10000;
10000
DWPD1 := (ncrc div 100)+28;
DWPD2 := (ncrc mod 100)+28;
CheckSum := chr(DWPD1) + chr (DWPD2);
end;C#Pascal
http://download.csdn.net/detail/yeqi3000/4349975
这个更直观点,看是不是你要的。
string strReturn = string.Empty;
uint nCRC, nTMP, nCHR, nCCITT, nTMP2;
uint DWPD1, DWPD2;
nCCITT = 0x1081;//十六进制常数用于校验和计算
nCRC = 0;//变量用于校验和计算
int T = packet.Length;//Packet = string to which the checksum will be calculated
for (int Z = 0; Z < T; Z++)//循环所有字符
{
nCHR = Convert.ToChar(packet[Z]);//当前字符
nTMP = nCRC | nCHR; //1-current checksum XOR current character
nTMP = nTMP & 15;
nTMP = nTMP * nCCITT;
nTMP2 = nCRC >> 4;
nTMP = nTMP2 | nTMP;
nCHR = nCHR >> 4;
nTMP = nCRC | nCHR;
nTMP = nTMP & 15;
nTMP = nTMP * nCCITT;
nTMP2 = nCRC >> 4;
nCRC = nTMP2 | nTMP;
}
nCRC = nCRC % 10000;
DWPD1 = (nCRC / 100) + 28;
DWPD2 = (nCRC % 100) + 28;
strReturn = Convert.ToChar(DWPD1).ToString() + Convert.ToChar(DWPD2).ToString();
return strReturn;