• 大小: 4KB
    文件类型: .cpp
    金币: 2
    下载: 4 次
    发布日期: 2021-05-04
  • 语言: C/C++
  • 标签: SLIP  

资源简介

已经在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++;

评论

共有 条评论