感觉做的方法不好,仅用于备份,仅供参考!
不多说了,直接上代码!
#include <iostream>
using namespace std;
#define M 10
int dataLength = 0;
struct NODE{
char strTag[100];
char strLen[100];
char strVale[100];
bool isNoLen;
int value;
}nodeData[M];
int GetNumLength(char *ppstr)
{
char*pstr = strdup(ppstr);
if(pstr==NULL)
return 0;
int num1 = 0;
int num2 = 0;
char *pSaveStr = strtok(pstr,",");
while(pSaveStr!=NULL)
{
sscanf(pSaveStr,"%x",&num2);
num1 *= (16*16);
num1 += num2;
pSaveStr = strtok(NULL,",");
}
delete pstr;
return num1;
}
bool GetMsg(char *pstr)
{
while(pstr!=NULL)
{
char *pSavest1 = pstr+30;
if(*pSavest1 == '\0')
return false;
strncpy(nodeData[dataLength].strTag, pstr, 19);
strncpy(nodeData[dataLength].strLen, pstr+20, 9);
int nunLength = GetNumLength(nodeData[dataLength].strLen);
if(nunLength!=0)
nodeData[dataLength].isNoLen = false;
else
nodeData[dataLength].isNoLen = true;
strncpy(nodeData[dataLength].strVale, pstr+30, nunLength*5);
nodeData[dataLength].value = GetNumLength(nodeData[dataLength].strVale);
pstr=pSavest1+nunLength*5;
dataLength++;
if(*pstr=='\0')
return true;
}
return true;
}
void PaiXu()
{
for (int i=0; i<dataLength; i++)
{
for (int j=i+1; j<dataLength; j++)
{
if(nodeData[i].value<nodeData[j].value) //sawp
{
struct NODE dateTemp;
memcpy(&dateTemp, &nodeData[i], sizeof(struct NODE));
memcpy(&nodeData[i], &nodeData[j], sizeof(struct NODE));
memcpy(&nodeData[j], &dateTemp, sizeof(struct NODE));
}
}
}
}
void main()
{
char strInput[1000] = {'\0'};
memset(nodeData, '\0', M*sizeof(struct NODE));
cin>>strInput;
if(!GetMsg(strInput))
{
cout<<"false"<<endl;
return;
}
PaiXu();
for (int i=0; i<dataLength; i++)
{
cout<<nodeData[i].strTag<<","<<nodeData[i].strLen;
if(i!=dataLength-1) //no end
if(nodeData[i].isNoLen) //no length
cout<<",";
else
cout<<","<<nodeData[i].strVale<<",";
else
if(!nodeData[i].isNoLen)
cout<<","<<nodeData[i].strVale;
}
cout<<endl;
}