// 反转义
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;
}