用于结构体转字节流的设计方案1
struct Datas {
enum {
Data_null,
Date_type,
Data_guid,
Data_name,
Data_id,
Type_end
};
int getType()
{
return getTypeInt(datas[Date_type]);
}
void SetType(int type)
{
datas[Date_type] = getTypeString(type);
}
CString *getData()
{
return datas;
}
void setData(int index, CString value)
{
datas[index] = value;
}
CString datas[Type_end] = { "" }; //max
CString toString()
{
return toString(Type_end);
}
bool toStruct(CString inbuff)
{
return toStruct(inbuff, Type_end);
}
CString toString(int endId)
{
CString buff;
for (int i = 0; i < endId; i++)
{
CString tmp = getData()[i].GetBuffer();
tmp.Replace(_T("|"), _T("%22%"));
tmp.Replace(_T("\\"), _T("%23%"));
buff += tmp;
buff += _T("|");
}
return buff;
}
bool toStruct(CString inbuff, int endId)
{
CString buff;
for (int i = 0; i < endId; i++)
{
if (AfxExtractSubString(buff, inbuff, i, '|'))
{
buff.Replace(_T("%22%"), _T("|"));
buff.Replace(_T("%23%"), _T("\\"));
getData()[i] = buff;
}
}
return true;
}
};
原理:
通过CString 数组保存基本信息,对数组下标定义相对的存储含义
toString 使得 CString 数组 转为 单个字符串,同时对特殊字符处理,进而用于发送端的网络数据发送
toStruct 将 单个字符串反转为 CString 数组,使得接收端将接收的数据进行解析