function CRC16(puchMsg:array of Byte;usDataLen:Word):Word;
var
  uchCRCHi,uchCRCLo:Byte;
  uIndex:Word;
  i:Word;
  index:Word;
begin
  uchCRCHi := $FF;
  uchCRCLo := $FF;
  index := 0;
  for i := usDataLen downto 0 do
  begin
    uIndex := uchCRCLo xor puchMsg[index];
    index := index + 1;
    uchCRCLo := uchCRCHi xor auchCRCHi[uIndex] ;
    uchCRCHi := auchCRCLo[uIndex] ;
  end;
  Result := uchCRCHi shl 8 or uchCRCLo
end;我自己搞了一下,请高手指教对否?

解决方案 »

  1.   

    function TForm27.CRC16(puchMsg: Byte; usDataLen: Word): Word;
    var
      uchCRCHi: Byte;
      uchCRCLo: Byte;
      uindex: Byte;
    begin
      uchCRCHi := $FF;
      uchCRCLo := $FF;
      while usDataLen > 0 do
      begin
        usDataLen := usDataLen - 1;
        uindex := uchCRCLo^ * puchMsg + +; // 计算CRC
        uchCRCLo := uchCRCHi^auchCRCHi[uindex];
        uchCRCHi := auchCRCLo[uindex];
      end;
      result := (uchCRCHi << 8 | uchCRCLo);
    end;
    大概是这样,中间那段你再查查delphi的语法吧
      

  2.   


    就是c到delphi的语法不熟啊,尤其这个 *puchMsg++ 是几个意思啊?
      

  3.   

    function CRC16(puchMsg:array of Byte;usDataLen:Word):Word;
    var
      uchCRCHi,uchCRCLo:Byte;
      uIndex:Word;
      i:Word;
      index:Word;
    begin
      uchCRCHi := $FF;
      uchCRCLo := $FF;
      index := 0;
      for i := usDataLen downto 1 do
      begin
        uIndex := uchCRCLo xor puchMsg[index];
        index := index + 1;
        uchCRCLo := uchCRCHi xor auchCRCHi[uIndex] ;
        uchCRCHi := auchCRCLo[uIndex] ;
      end;
      Result := uchCRCHi shl 8 or uchCRCLo
    end;好吧,就是这样的,经过验证了