|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
/*
应用场景之一:串口通讯
*/
int pack_encode(char *src, int src_len, char *dst, int *dst_len)
{
int i = 0;
int j = 0;
if (!src || !dst || !dst_len)
return -1;
dst[j++] = 0x7E;
for (i = 0; i < src_len; i++)
{
if (src == 0x7E)
{
dst[j++] = 0x7D;
dst[j++] = 0x5E;
}
else if (src == 0x7D)
{
dst[j++] = 0x7D;
dst[j++] = 0x5D;
}
else
{
dst[j++] = src;
}
}
dst[j++] = 0x7E;
*dst_len = j;
return 0;
}
int pack_decode(char *src, int src_len, char *dst, int *dst_len)
{
int i = 0;
int j = 0;
if (!src || !dst || !dst_len || src[0] != 0x7E || src[src_len - 1] != 0x7E)
return -1;
src_len--;
for (i = 1; i < src_len; i++)
{
if (src == 0x7D && (i + 1) < src_len)
{
i++;
if (src == 0x5E)
{
dst[j++] = 0x7E;
}
else if (src == 0x5D)
{
dst[j++] = 0x7D;
}
else
{
return -1;
}
}
else
{
dst[j++] = src;
}
}
*dst_len = j;
return 0;
}
int main(int argc, char *argv[])
{
int i = 0;
int len = 0;
char buff[128] = {0x7F};
char temp[128] = {0};
char result[128] = {0};
pack_encode(buff, 1, temp, &len);
printf("encode reault:len=%d,", len);
for (i = 0; i < len; i++)
printf("%02x ", temp);
printf("\n");
pack_decode(temp, len, result, &len);
printf("decode reault:len=%d,", len);
for (i = 0; i < len; i++)
printf("%02x ", result);
printf("\n");
if (memcmp(result, buff, len) != 0)
{
printf("fuck!test failed\n");
}
else
{
printf("yes!, test ok\n");
}
return 0;
}
/*
打包,解包、测试都在上面了,拿去用吧,不用感谢。
*/ |
|