上技术论坛,帮一个菜鸟兄弟作了一个打包解包的处理示范,也不知道会不会误人子弟,哈,管不了那么多了。唉,tnnd,现在的年轻人,比我们那时候还牛逼,C++语言还没搞利索就出来混饭吃了!还有一个更傻冒的,居然问我这个打包解包处理方法,在VB里面应该怎么搞,靠,当场让他自己去挖个坑把自个儿给埋了算了!不知道是中国教育界的耻辱还是中国IT界的耻辱,这样的兄弟,也能一个月几千块人民币,这工资还真TM好赚啊。
//---------------------------------------------------------------------------------
//文件名: StructTest.h
//功能: 数据包处理,打包、解包
//创建人: sam young
//创建时间:2004-3-1
//---------------------------------------------------------------------------------
//结构定义
struct STRUCT_TEST
{
char szTemp[20];
int iChannel;
int iID;
long lID2;
STRUCT_TEST()
{
//定义结构时,将整个结构清零
ZeroMemory(this,sizeof(STRUCT_TEST));
}
};
//打包函数
//char* OutBuf:
//void* InputStruct:传入的数据结构
UINT MakeStructBuff(char* OutBuf,void* InputStruct)
{
STRUCT_TEST *pStruct=(STRUCT_TEST *)InputStruct;
int pos=0;//pos为当前位置,
memcpy(OutBuf[pos],pStruct->szTemp,strlen(pStruct->szTemp)+1);//这里我们一般将字符后面加一个二进制0,当然了,这个看习惯
pos=pos+strlen(pStruct->szTemp)+1;
memcpy(OutBuf[pos],pStruct->iChannel,2);
pos=pos+2;
memcpy(OutBuf[pos],pStruct->iID,2);
pos=pos+2;
memcpy(OutBuf[pos],pStruct->LID,4);
}
//解包函数
//void* ReceiveBuf:生成的数据结构
//char* buf:传入的数据包
void GetFromBuf(void* ReceiveBuf,char* buf)
{
int pos=0;
//强制使ReceiverBuf与数据结构一致,这样,这个ReceiverBuf就与结构同样使用了
STRUCT_TEST *pStructReceive=(STRUCT_TEST *)ReceiveBuf;
int len=StrnCopy(pStructReceive->szTemp,20,&buf[pos]);
pos=pos+len+1;
pStruct->iChannel=(int)buf[pos];
pos=pos+2;
pStruct->iID=(int)buf[pos];
pos=pos+2;
pStruct->LID=(long)buf[pos];
}
//拷贝最大化的字符串
int StrnCopy(char* szbuf,int nMaxstrlen,char* szSource)
{
int nStrlen=strlen(szSource);
nStrlen=(nStrlen>nMaxstrlen)?nMaxstrlen:nStrlen;
strncpy(szbuf,szSource,nStrlen);
return nStrlen;
}