tlv,簡單理解就是type,length,value。是一種結構化的資料。一般type為4個位元組的列舉,length為4個位元組,表示value的長度。value即為實際的值。tlv直接可以巢狀,比如大的tlv中的value又是乙個tlv。下面有個小例子幫助理解。
#include #include #ifdef _win32
#include #pragma comment(lib, "ws2_32")
#endif //_win32
enum emtlvnodetype
;typedef struct _cat_info
cat_info, *lpcat_info;
class ctlvpacket
~ctlvpacket()
bool writeint(int data, bool bmoveptr = true)
bool write(const void *pdst, unsigned int uicount)
bool readint(int *data, bool bmoveptr = true)
bool read(void *pdst, unsigned int uicount)
private:
char *m_pdata;
unsigned int m_uilength;
char *m_penddata;
char *m_pwriteptr;
char *m_preadptr;
};/*
**格式:**
root l1 v
t l v t l v t l v
l1 的長度即為「t l v t l v t l v」的長度
*/int tlv_encodecat(lpcat_info pcatinfo, char *pbuf, int &ilen)
ctlvpacket enc(pbuf, ilen);
enc.writeint(emtlvnroot);
enc.writeint(20 + 12 + 12);
//t 佔4個位元組 ,l佔4個位元組,v佔12個位元組,第乙個子tlv佔20個位元組
enc.writeint(emtlvname);
enc.writeint(sizeof(pcatinfo->szname));
enc.write(pcatinfo->szname, sizeof(pcatinfo->szname));
enc.writeint(emtlvage);
enc.writeint(4);
enc.writeint(pcatinfo->iage);
enc.writeint(emtlvcolor);
enc.writeint(4);
enc.writeint(pcatinfo->icolor);
ilen = 8 + 20 + 12 + 12;
return 0;
}int tlv_decodecat(char *pbuf, int ilen, lpcat_info pcatinfo)
ctlvpacket encdec(pbuf, ilen);
int itype;
int isum, ilength;
encdec.readint(&itype);
if (emtlvnroot != itype)
encdec.readint(&isum);
while (isum > 0) }
return 0;
}int main(int argc, char* ar**)
; cat_info cat;
memset(&cat, 0, sizeof(cat));
strcpy(cat.szname, "tom");
cat.iage = 5;
cat.icolor = 2;
iret = tlv_encodecat(&cat, buf, ilen);
if (0 == iret)
else
memset(&cat, 0, sizeof(cat));
iret = tlv_decodecat(buf, ilen, &cat);
if (0 == iret)
else
int iwait = getchar();
return 0;
}
TLV格式解析
tlv tlv格式資料是指由 tag,length value 組成的資料。具體說明如下 tag標籤的屬性為 bit,由 16進製表示,佔1 2個位元組長度。例如,0x9f33 為乙個占用兩個位元組 的tag 標籤。而 0x95 為乙個占用乙個位元組的 tag標籤。若 tag標籤的第乙個位元組 注 ...
TLV格式說明
下面是對tag後面出現0x81的說明 tlv tag length value 即每個子域由 tag標籤 t 子域取值的長度 l 和子域取值 v 構成。tag標籤的屬性為 bit,由 16進製表示,佔1 2個位元組長度。例如,9f33 為乙個占用兩個位元組的 tag標籤。而 95 為乙個占用乙個位元...
TLV格式是什麼格式
tlv 格式是什麼格式 一種可變格式,tlv 的意思就是 type 型別,lenght 長度,value 值 type 和 length 的長度固定,一般那是 2 4 個位元組 value 的長度有 length 指定 解析方法 1.讀取 type 轉換為 ntohl ntohs 轉換為主機位元組序...