编辑代码

#include <stdio.h>

int main()
{
	unsigned short recive_len = 0;
	unsigned short recive_count = 0;
	unsigned char recive_data[1024] = {0};
	unsigned char recive_error = 0;
    unsigned char testbuff[1024] = {0x7e,0x05,0x00,0x31,0x32,0x7d,0x01,0x7d,0x02,0x44,0x3f,0x7e};//0x7e,0x05,0x00,0x31,0x32,0x7d,0x01,0x7d,0x02,0x44,0x3f,0x7e
    unsigned short testsize = 1024;
    unsigned short i = 0;
    unsigned char crc = 0;
    recive_len = (testbuff[2] <<8 | testbuff[1]);
    if(testbuff[0] != 0x7e)
    {
        recive_error = 1;
    }
    else
    {
        for(i = 0;i<testsize;i++)
        {
            if(testbuff[i] == 0x7d)
            {
                ++i;
                if(testbuff[i] == 0x01)
                {
                    recive_data[recive_count++] = 0x7d;
                }
                else if(testbuff[i] == 0x02)
                {
                    recive_data[recive_count++] = 0x7e;
                }
                else
                {
                    recive_error = 1;
                }
            }
            else
            {
                recive_data[recive_count++] = testbuff[i];
            }
        }       
    }
    for(i = 0;i<(3+recive_len);i++)
    {
       crc^=recive_data[i];     
    }

    if((crc != recive_data[3+recive_len])||(recive_data[3+recive_len+1] != 0x7e))
    {
        recive_error = 1;
    }


    if(recive_error != 1)
    {
        for(i=0;i<(3+recive_len+2);i++)
        {
            printf("recive_data[%d] %x\r",i,recive_data[i]);
        }   
        printf("crc %x\r",crc);
    }
    else
    {
         printf("error \r");
    }

}