class CFrame  
{
public:
INT8U RevertFrame(INT8U* PSrc,INT8U Count);
void CreateFrame(const INT8U* pSrc,INT8U Count, INT8U NewParam);
INT8U GetXORByte(void);
void EnCode(INT8U NewParam);
void DeCode(INT8U NewParam);
unsigned char m_Count;
CFrame();
virtual ~CFrame(); void CreateConnectOrder(void);
INT8U m_Buf[256];private:

unsigned char m_ParamLastGet,m_ParamLastSend;
};
static const unsigned char ComXORMap[] = { 0x0b,0x01,0x00,0x08,0x04,0x02,0x01,0x0f,
0x0e,0x07,0x09,0x0a,0x02,0x0d,0x0c,0x03 };CFrame::CFrame()
{
    m_Count = 0;
    m_ParamLastGet = m_ParamLastSend = 0;
}CFrame::~CFrame()
{}void CFrame::DeCode(INT8U Param)
{
    INT8U Tmp =  Param & 0x0f;

for ( INT8U i = 1; i < m_Count-1; i++ )
{
    m_Buf[i] ^= ComXORMap[Tmp];
Tmp++;
Tmp &= 0x0f;

}void CFrame::EnCode(INT8U NewParam)
{
    DeCode(NewParam);    
}INT8U CFrame::GetXORByte()
{
//此时m_Buf[0]     : FRAME_SATRT
//此时m_Buf[1]     :  ORDER
//此时m_Buf[2]     :  Dat1
//....
//m_Buf[m_Count-3] :  Datn
//m_Buf[m_Count-2] :  XOR
//m_Buf[m_Count-1] :  PARAM
//m_Buf[m_Count]   :  FRAME_END      INT8U XOR = 0;    for (INT8U i = 1; i<(m_Count-2); i++)
        XOR ^= m_Buf[i];      
   
    return XOR;
}void CFrame::CreateFrame(const INT8U* pSrc, INT8U Count, INT8U NewParam)
{
// pSrc ->     ORDER + Dat1 +... + Datn//此时m_Buf[0]     : FRAME_SATRT
//此时m_Buf[1]     :  ORDER
//此时m_Buf[2]     :  Dat1
//....
//m_Buf[m_Count-3] :  Datn
//m_Buf[m_Count-2] :  XOR
//m_Buf[m_Count-1] :  PARAM
//m_Buf[m_Count]   :  FRAME_END
    NewParam &= 0x0f;
m_ParamLastSend = NewParam;
m_Count = Count + 3;
    m_Buf[0] = FRAME_SATRT;
    m_Buf[m_Count] = FRAME_END;
m_Buf[m_Count - 1] = NewParam;
memcpy((void *)&m_Buf[1],(const void*)pSrc,Count);
    m_Buf[m_Count - 2] = GetXORByte();
EnCode(m_ParamLastGet+NewParam);
//m_ParamLastGet = NewParam;  
}
INT8U CFrame::RevertFrame(INT8U* pSrc, INT8U Count)
{
// pSrc ->     FRAME_SATRT + ORDER + Dat1 +... + Datn + XOR + PARAM + FRAME_END
//此时m_Buf[0]     : FRAME_SATRT
//此时m_Buf[1]     :  ORDER
//此时m_Buf[2]     :  Dat1
//....
//m_Buf[m_Count-3] :  Datn
//m_Buf[m_Count-2] :  XOR
//m_Buf[m_Count-1] :  PARAM
//m_Buf[m_Count]   :  FRAME_END
    m_Count = Count-1; memcpy((void *)&m_Buf[0],(const void*)pSrc,Count);
m_ParamLastGet = m_Buf[m_Count-1];
DeCode(m_ParamLastSend+m_Buf[m_Count-1]);
if ( m_Buf[m_Count - 2] != GetXORByte() )
{
return false;
}
else
{
return true;
}

}void CFrame::CreateConnectOrder(void)
{
//此时m_Buf[0]     : FRAME_SATRT
//此时m_Buf[1]     :  ORDER
//此时m_Buf[2]     :  Dat1
//....
//m_Buf[m_Count-3] :  Datn
//m_Buf[m_Count-2] :  XOR
//m_Buf[m_Count-1] :  PARAM
//m_Buf[m_Count]   :  FRAME_END
static const INT8U Sample[] = { ORDER_CONNECT };
CTime t = CTime::GetCurrentTime();   
    CreateFrame(Sample,sizeof(Sample),t.GetSecond());

解决方案 »

  1.   

    class CFrame   

    public: 
    INT8U RevertFrame(INT8U* PSrc,INT8U Count); 
    void CreateFrame(const INT8U* pSrc,INT8U Count, INT8U NewParam); 
    INT8U GetXORByte(void); 
    void EnCode(INT8U NewParam); 
    void DeCode(INT8U NewParam); 
    unsigned char m_Count; 
    CFrame(); 
    virtual ~CFrame(); void CreateConnectOrder(void); 
    INT8U m_Buf[256]; private: unsigned char m_ParamLastGet,m_ParamLastSend; 
    }; 
    static const unsigned char ComXORMap[] = { 0x0b,0x01,0x00,0x08,0x04,0x02,0x01,0x0f, 
    0x0e,0x07,0x09,0x0a,0x02,0x0d,0x0c,0x03 }; CFrame::CFrame() 

        m_Count = 0; 
        m_ParamLastGet = m_ParamLastSend = 0; 
    } CFrame::~CFrame() 
    { } void CFrame::DeCode(INT8U Param) 

        INT8U Tmp =  Param & 0x0f; for ( INT8U i = 1; i  < m_Count-1; i++ ) 

        m_Buf[i] ^= ComXORMap[Tmp]; 
    Tmp++; 
    Tmp &= 0x0f; 
    }  
    } void CFrame::EnCode(INT8U NewParam) 

        DeCode(NewParam);     
    } INT8U CFrame::GetXORByte() 

          INT8U XOR = 0;     for (INT8U i = 1; i <(m_Count-2); i++) 
            XOR ^= m_Buf[i];       
        
        return XOR; 
    } void CFrame::CreateFrame(const INT8U* pSrc, INT8U Count, INT8U NewParam) 
    {     NewParam &= 0x0f; 
    m_ParamLastSend = NewParam; 
    m_Count = Count + 3; 
        m_Buf[0] = FRAME_SATRT; 
        m_Buf[m_Count] = FRAME_END; 
    m_Buf[m_Count - 1] = NewParam; 
    memcpy((void *)&m_Buf[1],(const void*)pSrc,Count); 
        m_Buf[m_Count - 2] = GetXORByte(); 
    EnCode(m_ParamLastGet+NewParam); 
    //m_ParamLastGet = NewParam;   

    INT8U CFrame::RevertFrame(INT8U* pSrc, INT8U Count) 

     
        m_Count = Count-1; memcpy((void *)&m_Buf[0],(const void*)pSrc,Count); 
    m_ParamLastGet = m_Buf[m_Count-1]; 
    DeCode(m_ParamLastSend+m_Buf[m_Count-1]); 
    if ( m_Buf[m_Count - 2] != GetXORByte() ) 

    return false; 

    else 

    return true; 
    } } void CFrame::CreateConnectOrder(void) 
    { static const INT8U Sample[] = { ORDER_CONNECT }; 
    CTime t = CTime::GetCurrentTime();    
        CreateFrame(Sample,sizeof(Sample),t.GetSecond()); 
    }  
      

  2.   

    先给你改一下第一段
    type 
    CFrame=class
    public
    RevertFrame(pSrc:^int64;count:int64):int64;
    procedure CreateFrame(const pSrc:^int64;count,NewParam:int64);
    procedure getXORbyte:int64;
    procedure Encode(newparam:int64);
    procedure decode(newparam:int64);
    m_count:byte;
    construcor create;
    destructor destory;
    procedure createconnectorder;
    m_buf:array[0.255] of int64;
    private
    m_paramlastget,m_paramlastsend:byte;
    end;
      

  3.   

    type 
    CFrame=class
    public
    RevertFrame(pSrc:^int64;count:int64):int64;
    procedure CreateFrame(const pSrc:^int64;count,NewParam:int64);
    procedure getXORbyte:int64;
    procedure Encode(newparam:int64);
    procedure decode(newparam:int64);
    m_count:byte;
    construcor create;
    destructor destory;
    procedure createconnectorder;
    m_buf:array[0.255] of int64;
    private
    m_paramlastget,m_paramlastsend:byte;
    end;
    TComXORMap=array of byte;
    var
    ComXORMap:TComXORMap=( 0x0b,0x01,0x00,0x08,0x04,0x02,0x01,0x0f, 
    0x0e,0x07,0x09,0x0a,0x02,0x0d,0x0c,0x03);
    implementation{$R *.dfm}contructor TCFrame.create;
    begin
    m_count:=0;
    m_ParamLastGet:=0;
    m_ParamLastSend:=0;
    end;