69,371
社区成员
发帖
与我相关
我的任务
分享
typedef struct _tag_M2M_PACKAGE
{
M2M_HEAD head; // 数据报的包头
//数据包包体
char data[100];
int n;
time_t t;
} M2M_PACKAGE;
//转换成字符串的时候增加各个字符标志:
比如:
M2M_PACKAGE a = {NULL, {0}, 1, 0};
"M2M_PACKAGE:a:NULL#0#1#0"
读的时候还原就行
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct M2M_HEAD
{
int size;
int cmdid;
int seqid;
int versionnum;
char SecurityID;
char ReserveWord;
int terminalID;
};
int M2M_HEAD_to_str(char **dest, struct M2M_HEAD *pHead)
{
unsigned int size = 0;
if (dest == NULL || pHead == NULL)
return -1;
size = 128 + 5 * sizeof(int) + 2 *sizeof(char);
*dest = (char *)malloc(size);
if (*dest == NULL)
return -2;
memset(*dest, 0, size);
sprintf(*dest,
"size=%d, "
"cmdid=%d, "
"seqid=%d, "
"versionnum=%d, "
"SecurityID=%c, "
"ReserveWord=%c, "
"terminalID=%d"
, pHead->size, pHead->cmdid, pHead->seqid, pHead->versionnum,
pHead->SecurityID, pHead->ReserveWord, pHead->terminalID);
return 0;
}
int M2M_HEAD_parse(char *str, struct M2M_HEAD **pHead)
{
if (str == NULL || pHead == NULL)
return -1;
*pHead = (struct M2M_HEAD *)malloc(sizeof(struct M2M_HEAD));
if (*pHead == NULL)
return -2;
memset(*pHead, 0, sizeof(struct M2M_HEAD));
sscanf(str,
"size=%d, "
"cmdid=%d, "
"seqid=%d, "
"versionnum=%d, "
"SecurityID=%c, "
"ReserveWord=%c, "
"terminalID=%d"
, &((*pHead)->size), &((*pHead)->cmdid), &((*pHead)->seqid), &((*pHead)->versionnum),
&((*pHead)->SecurityID), &((*pHead)->ReserveWord), &((*pHead)->terminalID));
return 0;
}
int main(int argc, char *argv[])
{
struct M2M_HEAD head_a;
struct M2M_HEAD *p = NULL;
char *str = NULL;
int res;
head_a.size = 3;
head_a.cmdid = 467;
head_a.seqid = 246327542;
head_a.versionnum = 33;
head_a.SecurityID = 'w';
head_a.ReserveWord = 'a';
head_a.terminalID = 2644636;
res = M2M_HEAD_to_str(&str, &head_a);
if (res != 0)
{
printf("Failed to execute M2M_HEAD_to_str");
return -1;
}
res = M2M_HEAD_parse(str, &p);
if (res != 0)
{
free(str);
str = NULL;
}
free(p);
p = NULL;
return 0;
}
int M2M_HEAD_parser(char *str, struct M2M_HEAD **pHead)
{
if (str == NULL || pHead == NULL)
return -1;
*pHead = (struct M2M_HEAD *)malloc(sizeof(struct M2M_HEAD));
if (*pHead == NULL)
return -2;
memset(pHead, 0, sizeof(struct M2M_HEAD));
sscanf(str,
"size=%d, "
"cmdid=%d, "
"seqid=%d, "
"versionnum=%d, "
"SecurityID=%c, "
"ReserveWord=%c, "
"terminalID=%d"
, &(*pHead->size), &(*pHead->cmdid), &(*pHead->seqid), &(*pHead->versionnum),
&(*pHead->SecurityID), &(*pHead->ReserveWord), &(*pHead->terminalID));
return 0;
}
int MWM_HEAD_to_str(char **dest, struct M2M_HEAD *pHead)
{
unsigned int size = 0;
if (dest == NULL || pHead == NULL)
return -1;
size = 128 + 5 * sizeof(int) + 2 *sizeof(char);
*dest = (char *)malloc(size);
if (*dest == NULL)
return -2;
memset(*dest, 0, size);
snprintf(*dest, size,
"size=%d, "
"cmdid=%d, "
"seqid=%d, "
"versionnum=%d, "
"SecurityID=%c, "
"ReserveWord=%c, "
"terminalID=%d"
, pHead->size, pHead->cmdid, pHead->seqid, pHead->versionnum,
pHead->SecurityID, pHead->ReserveWord, pHead->terminalID);
return 0;
}