📄 cpacker.cpp
字号:
#include "stdafx.h"
#include "CPacker.h"
CPacker::CPacker()
{
m_uLength=0;
}
BOOL CPacker::UniPack(BYTE * pbyInputFrame,BYTE* pbyPackedFrame,UINT uInputLength,UINT& uPackedLength)
{
m_uLength=uInputLength;
BYTE by;
UINT i,j;
for(i=0;i<uInputLength;i++)
{
by=pbyInputFrame[i];
//if(by==FRAME_FLAG||by==ESCAPE_CODE||by=='+')
if(by==FRAME_FLAG||by==ESCAPE_CODE
||by==FLOW_CONTROL_XON||by==FLOW_CONTROL_XOFF||by==IDLE_CODE)
m_uLength++;
}
if(pbyPackedFrame==NULL)
{
uPackedLength=m_uLength+2;
return FALSE;
}
if(uPackedLength<m_uLength+2)
{
uPackedLength=m_uLength+2;
return FALSE;
}
pbyPackedFrame[0]=FRAME_FLAG;
pbyPackedFrame[1]=m_byPM;
j=2;
for(i=0;i<uInputLength;i++)
{
by=pbyInputFrame[i];
if(by==FRAME_FLAG)
{
pbyPackedFrame[j]=ESCAPE_CODE;
j++;
pbyPackedFrame[j]=ESCAPE_FLAG;
j++;
}
else if(by==ESCAPE_CODE)
{
pbyPackedFrame[j]=ESCAPE_CODE;
j++;
pbyPackedFrame[j]=ESCAPE_CODE;
j++;
}
else if(by==FLOW_CONTROL_XON)
{
pbyPackedFrame[j]=ESCAPE_CODE;
j++;
pbyPackedFrame[j]=ESCAPE_FLOW_CONTROL_XON;
j++;
}
else if(by==FLOW_CONTROL_XOFF)
{
pbyPackedFrame[j]=ESCAPE_CODE;
j++;
pbyPackedFrame[j]=ESCAPE_FLOW_CONTROL_XOFF;
j++;
}
else if(by==IDLE_CODE)
{
pbyPackedFrame[j]=ESCAPE_CODE;
j++;
pbyPackedFrame[j]=ESCAPE_IDLE_CODE;
j++;
}
/*
else if(by=='+')
{
pbyPackedFrame[j]=ESCAPE_CODE;
j++;
pbyPackedFrame[j]=by;
j++;
}
*/
else
{
pbyPackedFrame[j]=by;
j++;
}
}
m_uLength++;
m_uLength++;
uPackedLength=m_uLength;
return TRUE;
}
//去掉填充码和转义码
int CPacker::Unpack(BYTE * pbyInputFrame,UINT& uLength)
{
if(uLength==0)return MT_ERR;
// TRACE("%d;",uLength);
//BYTE* pby=new BYTE[uLength];
BYTE pby[1024];
UINT i,j;
i=0;
j=0;
m_byPM=pbyInputFrame[i];
i++;
while(i<uLength)
{
if(pbyInputFrame[i]==ESCAPE_CODE)
{
i++;
if(pbyInputFrame[i]==ESCAPE_CODE)
{
pby[j]=ESCAPE_CODE;
i++;
j++;
}
else if(pbyInputFrame[i]==ESCAPE_IDLE_CODE)
{
pby[j]=IDLE_CODE;
i++;
j++;
}
else if(pbyInputFrame[i]==ESCAPE_FLOW_CONTROL_XOFF)
{
pby[j]=FLOW_CONTROL_XOFF;
i++;
j++;
}
else if(pbyInputFrame[i]==ESCAPE_FLOW_CONTROL_XON)
{
pby[j]=FLOW_CONTROL_XON;
i++;
j++;
}
/*
else if(pbyInputFrame[i]=='+')
{
pby[j]='+';
i++;
j++;
}
*/
else if(pbyInputFrame[i]==ESCAPE_FLAG)
{
pby[j]=FRAME_FLAG;
j++;
i++;
}
else
{
pby[j]=FRAME_FLAG;
j++;
i++;
}
}
else
{
pby[j]=pbyInputFrame[i];
j++;
i++;
}
}
uLength=j;
CopyMemory(pbyInputFrame,pby,j);
//delete[] pby;
return (int)m_byPM;
}
CPacker::~CPacker()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -