TLV,简单理解就是type,length,value。是一种结构化的数据。一般type为4个字节的枚举,length为4个字节,表示value的长度。value即为实际的值。TLV直接可以嵌套,比如大的TLV中的value又是一个TLV。下面有个小例子帮助理解。
#include <stdio.h>
#include <string>
#ifdef _WIN32
#include <WinSock2.h>
#pragma comment(lib, "WS2_32")
#endif //_WIN32
enum emTLVNodeType
{
emTlvNNone = 0,
emTlvNRoot,
emTlvName,
emTlvAge,
emTlvColor
};
typedef struct _CAT_INFO
{
char szName[12];
int iAge;
int iColor;
}CAT_INFO, *LPCAT_INFO;
class CTlvPacket
{
public:
CTlvPacket(char *pBuf, unsigned int len) :m_pData(pBuf), m_uiLength(len), m_pEndData(m_pData + len), m_pWritePtr(m_pData), m_pReadPtr(m_pData) { }
~CTlvPacket() { }
bool WriteInt(int data, bool bMovePtr = true)
{
int tmp = htonl(data);
return Write(&tmp, sizeof(int));
}
bool Write(const void *pDst, unsigned int uiCount)
{
::memcpy(m_pWritePtr, pDst, uiCount);
m_pWritePtr