void Client::Fx(unsigned char* ch)
{
unsigned char* pchar = ch;
for(int i = 0; i < m_nMsgLen; i++)
{
switch(m_nSamhp)
{
case 1: //frame byte
*m_pRec = pchar[i];
m_pRec++;
m_nLen--;
if(m_nLen < 1)
{
m_nSamhp = 0;
m_pRec = m_szRec; //置初始位置
if(m_check == pchar[i])
{
m_szRec[1] = GOVT_BUF_OK;
}
else
m_szRec[1] = GOVT_BUF_NULL;
}
else
{
m_check ^= pchar[i];
m_check = CRC_ary[m_check];//一个数组 byte
}
break;
}
}
}

解决方案 »

  1.   

    用到的变量的定义
    int m_nSamhp;
    int m_nMsgLen;
    int m_nLen;
    unsigned char m_szRec[255];
    unsigned char* m_pRec;
    unsigned char m_check;
      

  2.   

    var
      m_nSamhp: Integer;
    m_nMsgLen: Integer;
    m_nLen: Integer;
    m_szRec: Array [0..254] of Char;
    m_pRec: PChar;
    m_check: Char;
    procedure Client.Fx(ch: PChar);
    var
      pc: PChar;   //pchar 改为 pc
      i: Integer;
    begin
    pc := ch;
    for i := 0 to m_nMsgLen - 1 do
    begin
    case (m_nSamhp) of
      1: //frame byte
            begin
         m_pRec := @pc[i];
         Inc(m_pRec);
         Dec(m_nLen);
         if (m_nLen < 1) then
        begin
         m_nSamhp := 0;
         m_pRec := m_szRec; //置初始位置
         if (m_check = pc[i]) then
         begin
         m_szRec[1] := GOVT_BUF_OK;
        end
         else
         m_szRec[1] := GOVT_BUF_NULL;
        end
         else
        begin
         m_check := Char(Byte(m_check) xor Byte(pc[i]));
         m_check := CRC_ary[m_check];//一个数组 byte
        end;
            end;
      end;
      end;
    end;