TLV格式解析與打包

2021-10-01 06:37:09 字數 2195 閱讀 9827

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 轉換為主機位元組序...