📄 tlv.cpp
字号:
#include <stdio.h>
#include <string.h>
#include <conio.h>
typedef struct userInfo
{
char user_type;
char user_real_name[20];
char user_sex;
char user_psword[10];
char user_psquestion[48];
char user_psanswer[48];
char user_company[48];
char user_occupation[32];
char user_birthday[10];
char user_nation[10];
char user_eduction[10];
char user_school[32];
char user_native[24];
char user_telephone[13];
char user_mobile[13];
char user_address[48];
char user_postalcode[7] ;
char user_bloodtype;
char user_constellation;
char user_homepage[64];
char user_instuction[128];
char user_sign[64];
}userInfo_t;
void compress(userInfo_t user_SEND,char* BuffPointer);
void decompress(char* BuffPointer,userInfo_t user_REC);
userInfo_t user_SEND,user_REC;
userInfo_t *user_RECPpointer=&user_REC;
userInfo_t *user_SendPointer=&user_SEND;
char Buff[2048];
char *BuffPointer=Buff;
int main()
{
/* user_SEND.user_type='1';
strcpy(user_SEND.user_real_name,"Chenlansheng");
user_SEND.user_sex='1';
strcpy(user_SEND.user_psword,"820803");
strcpy(user_SEND.user_psquestion,"my mum's birthday?");
strcpy(user_SEND.user_psanswer,"19560515");
strcpy(user_SEND.user_company,"Changzhou ZhongHai");
strcpy(user_SEND.user_occupation,"Manager");
strcpy(user_SEND.user_birthday,"19820803");
strcpy(user_SEND.user_nation,"China");
strcpy(user_SEND.user_eduction,"Hight school");
strcpy(user_SEND.user_school,"2MiddleSchool");
strcpy(user_SEND.user_native,"JiangSU");
strcpy(user_SEND.user_telephone,"0");
strcpy(user_SEND.user_mobile,"1391932110");
strcpy(user_SEND.user_address,"QingGuoXiang");
strcpy(user_SEND.user_postalcode,"213002");
user_SEND.user_bloodtype='O';
user_SEND.user_constellation='A';
strcpy(user_SEND.user_homepage,"www.baidu.com");
strcpy(user_SEND.user_instuction,"Nothing");
strcpy(user_SEND.user_sign,"Do MySelf");
*/ //测试用,
compress(user_SEND,BuffPointer);
/* for(int num=0;num<300;num++)
printf("Buff[%d]=%c\n",num,Buff[num]);
*/ //测试用,
decompress(BuffPointer,user_REC);
getch();
return 0;
}
void compress(userInfo_t user_SEND,char* BuffPointer)
{
int BuffSendNum=0; //Buff包字节序号
unsigned int ByteSendNum; //各字段发送时的字节数
for(int n=0;n<22;n++)
{
switch(n)
{
case 0: if(user_SendPointer->user_type!=0)
{
ByteSendNum=1;
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_type,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 1: if(user_SendPointer->user_real_name!=0)
{
ByteSendNum=strlen(user_SendPointer->user_real_name);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_real_name,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 2: if(user_SendPointer->user_sex!=0)
{
ByteSendNum=1;
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_sex,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 3: if(user_SendPointer->user_psword!=0)
{
ByteSendNum=strlen(user_SendPointer->user_psword);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_psword,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 4: if(user_SendPointer->user_psquestion!=0)
{
ByteSendNum=strlen(user_SendPointer->user_psquestion);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_psquestion,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 5: if(user_SendPointer->user_psanswer!=0)
{
ByteSendNum=strlen(user_SendPointer->user_psanswer);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_psanswer,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 6: if(user_SendPointer->user_company!=0)
{
ByteSendNum=strlen(user_SendPointer->user_company);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_company,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 7: if(user_SendPointer->user_occupation!=0)
{
ByteSendNum=strlen(user_SendPointer->user_occupation);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_occupation,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 8: if(user_SendPointer->user_birthday!=0)
{
ByteSendNum=strlen(user_SendPointer->user_birthday);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_birthday,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 9:if(user_SendPointer->user_nation!=0)
{
ByteSendNum=strlen(user_SendPointer->user_nation);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_nation,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 10:if(user_SendPointer->user_eduction!=0)
{
ByteSendNum=strlen(user_SendPointer->user_eduction);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_eduction,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 11:if(user_SendPointer->user_school!=0)
{
ByteSendNum=strlen(user_SendPointer->user_school);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_school,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 12:if(user_SendPointer->user_native!=0)
{
ByteSendNum=strlen(user_SendPointer->user_native);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_native,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 13:if(user_SendPointer->user_telephone!=0)
{
ByteSendNum=strlen(user_SendPointer->user_telephone);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_telephone,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 14:if(user_SendPointer->user_mobile!=0)
{
ByteSendNum=strlen(user_SendPointer->user_mobile);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_mobile,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 15:if(user_SendPointer->user_address!=0)
{
ByteSendNum=strlen(user_SendPointer->user_address);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_address,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 16:if(user_SendPointer->user_postalcode!=0)
{
ByteSendNum=strlen(user_SendPointer->user_postalcode);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_postalcode,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 17:if(user_SendPointer->user_bloodtype!=0)
{
ByteSendNum=1;
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_bloodtype,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 18:if(user_SendPointer->user_constellation!=0)
{
ByteSendNum=1;
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_constellation,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 19:if(user_SendPointer->user_homepage!=0)
{
ByteSendNum=strlen(user_SendPointer->user_homepage);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_homepage,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 20:if(user_SendPointer->user_instuction!=0)
{
ByteSendNum=strlen(user_SendPointer->user_instuction);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_instuction,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
case 21:if(user_SendPointer->user_sign!=0)
{
ByteSendNum=strlen(user_SendPointer->user_sign);
Buff[BuffSendNum]=n;
Buff[++BuffSendNum]=ByteSendNum;
memcpy(&Buff[++BuffSendNum],&user_SendPointer->user_sign,ByteSendNum);
BuffSendNum+=ByteSendNum;
}
break;
}
}
}
void decompress(char* BuffPointer,userInfo_t user_REC)
{
unsigned int BuffRecNum=0; //Buff包接收字节序列标记
int BuffCount=0; //Buff包内存拷贝字节数
unsigned int BuffRecFlag=0; //Buff包各单元记数记号
for(int n=0;n<22;n++)
{
BuffRecFlag=BuffPointer[BuffRecNum++];
BuffCount=int(BuffPointer[BuffRecNum++]);
printf("BuffRecFlag=%c\n",BuffRecFlag+48);
printf("BuffCount=%d\n",BuffCount);
switch(BuffRecFlag+48)
{
case '0': memcpy(&(user_RECPpointer->user_type),&BuffPointer[BuffRecNum],BuffCount);
break;
case '1': memcpy(&(user_RECPpointer->user_real_name),&BuffPointer[BuffRecNum],BuffCount);
break;
case '2': memcpy(&(user_RECPpointer->user_sex),&BuffPointer[BuffRecNum],BuffCount);
break;
case '3': memcpy(&(user_RECPpointer->user_psword),&BuffPointer[BuffRecNum],BuffCount);
break;
case '4': memcpy(&(user_RECPpointer->user_psquestion),&BuffPointer[BuffRecNum],BuffCount);
break;
case '5': memcpy(&(user_RECPpointer->user_psanswer),&BuffPointer[BuffRecNum],BuffCount);
break;
case '6': memcpy(&(user_RECPpointer->user_company),&BuffPointer[BuffRecNum],BuffCount);
break;
case '7': memcpy(&(user_RECPpointer->user_occupation),&BuffPointer[BuffRecNum],BuffCount);
break;
case '8': memcpy(&(user_RECPpointer->user_birthday),&BuffPointer[BuffRecNum],BuffCount);
break;
case '9': memcpy(&(user_RECPpointer->user_nation),&BuffPointer[BuffRecNum],BuffCount);
break;
case '10': memcpy(&(user_RECPpointer->user_eduction),&BuffPointer[BuffRecNum],BuffCount);
break;
case '11': memcpy(&(user_RECPpointer->user_school),&BuffPointer[BuffRecNum],BuffCount);
break;
case '12': memcpy(&(user_RECPpointer->user_native),&BuffPointer[BuffRecNum],BuffCount);
break;
case '13': memcpy(&(user_RECPpointer->user_mobile),&BuffPointer[BuffRecNum],BuffCount);
break;
case '14': memcpy(&(user_RECPpointer->user_address),&BuffPointer[BuffRecNum],BuffCount);
break;
case '15': memcpy(&(user_RECPpointer->user_postalcode),&BuffPointer[BuffRecNum],BuffCount);
break;
case '16': memcpy(&(user_RECPpointer->user_bloodtype),&BuffPointer[BuffRecNum],BuffCount);
break;
case '17': memcpy(&(user_RECPpointer->user_type),&BuffPointer[BuffRecNum],BuffCount);
break;
case '18': memcpy(&(user_RECPpointer->user_constellation),&BuffPointer[BuffRecNum],BuffCount);
break;
case '19': memcpy(&(user_RECPpointer->user_homepage),&BuffPointer[BuffRecNum],BuffCount);
break;
case '20': memcpy(&(user_RECPpointer->user_instuction),&BuffPointer[BuffRecNum],BuffCount);
break;
case '21': memcpy(&(user_RECPpointer->user_sign),&BuffPointer[BuffRecNum],BuffCount);
}
BuffRecNum+=BuffCount;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -