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

解决方案 »

  1.   

    这个没有,文档只是给出了Pascal算法函数,还没有试过发成功的。
      

  2.   

    这个我也搞不懂,Pascal都没这东西吧?
      

  3.   

    是不是CRC16?
    http://download.csdn.net/detail/yeqi3000/4349975
      

  4.   

    这个我也搞不懂,Pascal都没这东西吧?
      

  5.   

    strenviar 不知道是哪个变量,写出来肯定出错的
      

  6.   

    http://blog.csdn.net/sqqyq/article/details/8236446
    这个更直观点,看是不是你要的。
      

  7.   

    其它能翻译出来吗?还没试,上面的链接不是有例子吗?我以为你解决了
    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;