资源简介
已经在vxworks上成功进行了编解码测试。编解码比较简单,已经封装好了编码函数和解码函数。大家可以稍加修改移植到你自己的平台。
代码片段和文件信息
#define END 0xC0
#define ESC 0xDB
#define ESC_END 0xDC
#define ESC_ESC 0xDD
#define SLIP_OP_OK 0
#define SLIP_ERROR_DST_LENGTH_SHORT -1
#define SLIP_ERROR_SRC_LENGTH_SHORT -2
#define SLIP_ERROR_FLAG_ERROR -3
#include
#include
using namespace std;
int Encapsulation(unsigned char* psrcbuf int srclen unsigned char* pdstbuf int &dstlen)
{
unsigned char* ptembuf = new unsigned char[2*srclen]; /*定义一个数组ptembuf用于对源数据中元素的替换*/
/*替换源数据中的元素*/
for(int i = 0 j = 0 count = 0; i < srclen; )
{
/*第一种假设替换m*/
if(psrcbuf[i]==END)
{
ptembuf[j] = ESC;
ptembuf[j + 1] = ESC_END;
j += 1;
j++;
i++;
count++;
continue;
}
/*第二种实际的0xDB*/
if(psrcbuf[i] == ESC)
{
ptembuf[j] = ESC;
ptembuf[j + 1] = ESC_ESC;
j += 2;
i++;
count++;
continue;
}
/*正常元素*/
else
{
ptembuf[j] = psrcbuf[i];
i++;
j++;
continue;
}
}
/*不够返回-1,结束程序*/
if(dstlen < (srclen + count + 2))
{
return SLIP_ERROR_DST_LENGTH_SHORT;
}
/*将ptembuf赋值给pdstbuf*/
else
{
dstlen = srclen + count + 2;
pdstbuf[0] = END; /*以 x 为报文头尾标志*/
pdstbuf[dstlen - 1] = END;
for(int k = 1; k < (srclen + count + 1); k++)
{
pdstbuf[k] = ptembuf[k - 1];
}
ptembuf = 0;
delete [] ptembuf; /*释放ptembuf内存*/
return SLIP_OP_OK;
}
return 0;
}
int Dencapsulation(unsigned char* psrcbuf int srclen unsigned char* pdstbuf int &dstlen)
{
int count;
count = 0;
/*报文标志错误返回-3*/
if(psrcbuf[0] != END || psrcbuf[srclen - 1] != END)
{
return SLIP_ERROR_FLAG_ERROR;
}
else
{
/*替换报文中的元素*/
for(int i = 1 j = 0; i < (srclen - 1);)
{
if(psrcbuf[i] == ESC && psrcbuf[i + 1] == ESC_END)
{
pdstbuf[j] = END;
i += 2;
j++;
count++;
continue;
}
if(psrcbuf[i] == ESC && psrcbuf[i + 1] == ESC_ESC)
{
pdstbuf[j] = ESC;
i += 2;
j++;
评论
共有 条评论