编辑代码

#include <stdio.h>
#include <stdint.h>
#include <string.h>



// 反转义
int unEscape_Detect(uint8_t *data, int len)
{
    int flag = 0;
    uint8_t tmp[1024] = {0};

    for (int i = 1; i < len; i++)
    {
        if (flag == 1)
        {
            memset(data, 0, sizeof(data));
            memcpy(data, tmp, len);
        }
        // 7d 01 ->7d
        if (data[i] == 0x7d && data[i + 1] == 0x01)
        {
            memset(tmp, 0, sizeof(tmp));
            memcpy(tmp, data, i + 1);
            flag = 1;
            len = len - 1;
            for (int a = i + 1; a < len; a++)
            {
                tmp[a] = data[a + 1];
            }
        }
    }
    for (int i = 1; i < len; i++)
    {
        if (flag == 1)
        {
            memset(data, 0, sizeof(data));
            memcpy(data, tmp, len);
        }
        // 7d 02 ->7e
        if (data[i] == 0x7d && data[i + 1] == 0x02)
        {
            memset(tmp, 0, sizeof(tmp));
            memcpy(tmp, data, i);
            tmp[i] = 0x7e;
            flag = 1;
            len = len - 1;

            for (int a = i + 1; a < len; a++)
            {
                tmp[a] = data[a + 1];
            }
        }
    }
    memcpy(data, tmp, len);
    return len;
}

int main ()
 {
    
    uint8_t a[30] = {0x7E, 0x80, 0x01, 0x7d,0x02, 0x70, 0x01,0x7d ,0x01 ,0x56, 0x78, 0x00 ,0x7d ,0x02 ,0x00 ,0x00, 0x02, 0x00 ,0x8E ,0x7E};

    int len = unEscape_Detect(a,20);
    for(int i =0;i<len;i++)
    {
        printf("%02x ",a[i]);
    }

    return 0;
}