青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

如何定義變長的TLV結(jié)構(gòu)體?

如何定義變長的TLV結(jié)構(gòu)體?

TLV是一種常用的用于通信的結(jié)構(gòu)體格式。T表示tag,L表示length,V表示value。其中T和L是固定大小的,V是可變大小,L表示的是V的長度。通常用于結(jié)構(gòu)化網(wǎng)絡(luò)通信中的數(shù)據(jù)流。如0x3 3 'aa\0',0x3 5 'aaaa\0',其中0x3表示tag的值,3 or 5表示的是后面的字符串的長度。由于V是可變長度的,所以在定義TLV結(jié)構(gòu)時(shí),需要將V定義成為可變大小。可定義如下:
struct TLV
{
    uint8_t tag;
    uint16_t len;
    char value[0];
}__attribute__((packed));

注意value分配的是0大小,最后一個(gè)成員為可變長的數(shù)組,對(duì)于TLV(Type-Length-Value)形式的結(jié)構(gòu),或者其他需要變長度的結(jié)構(gòu)體,用這種方式定義最好。使用起來非常方便,創(chuàng)建時(shí),malloc一段結(jié)構(gòu)體大小加上可變長數(shù)據(jù)長度的空間給它,可變長部分可按數(shù)組的方式訪問,釋放時(shí),直接把整個(gè)結(jié)構(gòu)體free掉就可以了。__attribute__(packed)用來強(qiáng)制不對(duì)struct TLV進(jìn)行4字節(jié)對(duì)齊,目的是為了獲取真實(shí)的TLV的空間使用情況。
int main()
{
    char *szMsg = "aaaaaaaaa";
    cout << sizeof(TLV) << endl; //the size of TLV
    uint16_t len = strlen(szMsg) + 1;
    struct TLV *pTLV;
    pTLV = (struct TLV*)malloc(sizeof(struct TLV) + sizeof(char)*len);
    pTLV->tag = 0x2;
    pTLV->len = len;
    memcpy(pTLV->value, szMsg, len);
    cout << pTLV->value << endl;
    free(pTLV);
    pTLV = NULL;
    return 0;
}

這里有關(guān)于設(shè)置變長TLV的詳細(xì)說明:http://www.douban.com/note/213324857/
這里有一個(gè)問題,如何實(shí)現(xiàn)嵌套TLV結(jié)構(gòu)呢?大家有什么好的思路嗎?歡迎交流
簡(jiǎn)單實(shí)現(xiàn)了一下嵌套TLV,不知道有沒有問題。
#include <iostream>
using namespace std;

struct TLVNODE
{
    uint8_t tag;
    uint16_t len;
    char value[0];
}__attribute__ ((packed));

struct TLV
{
    int hei;
    uint8_t tag;
    uint16_t len;
    struct TLVNODE value[0];
} __attribute__ ((packed));

int main()
{
    //char *szMsg = "aaaaaaaaaaa";
    cout << sizeof(TLV) << endl;
    //uint16_t len = strlen(szMsg) + 1;

    char *szNodeMsg = "bbbbbbbbbb";
    uint16_t nodelen = strlen(szNodeMsg) + 1;
    struct TLVNODE *pNode = (struct TLVNODE *) malloc(sizeof(struct TLVNODE) + sizeof(char)*nodelen); 
    pNode->tag = 0x3;
    pNode->len = nodelen;
    memcpy(pNode->value, szNodeMsg, nodelen);


    struct TLV *pTlv;
    uint16_t nodeSize = sizeof(struct TLVNODE) + sizeof(char)*nodelen;
    pTlv = (struct TLV*)malloc(sizeof(struct TLV) + nodeSize);
    pTlv->tag = 0x2;
    pTlv->len = nodeSize;
//    pTlv->value[0] = (struct TLVNODE)*pNode;
    memcpy(pTlv->value, pNode, nodeSize);
    free(pNode);
    pNode = NULL;
    cout << sizeof(*pTlv) << endl;
    /*for (int i = 0; i < len; ++i)
    {
        pTlv->value[i] = szMsg[i]; 
    }
*/

    /*memcpy(pTlv->value, szMsg, len);*/
    //cout << pTlv->value << endl;
    free(pTlv);
    pTlv = NULL;
    return 0;
}




posted on 2012-06-14 15:46 MrRightLeft 閱讀(6592) 評(píng)論(4)  編輯 收藏 引用 所屬分類: C/C++

評(píng)論

# re: 如何定義變長的TLV結(jié)構(gòu)體? 2012-06-14 16:23 Richard Wei

windows API里很多結(jié)構(gòu)體的第一個(gè)字段一般都是UINT cbSize, 就是為了以后可以擴(kuò)充。  回復(fù)  更多評(píng)論   

# re: 如何定義變長的TLV結(jié)構(gòu)體? 2012-06-15 16:13 unkown

支持BUFFER類型,然后在BUFFER中定義變長的TLV結(jié)構(gòu)體,
兩種選擇,
1.結(jié)構(gòu)體中有size字段
2.類似于BSTR,在TLV結(jié)構(gòu)體內(nèi)存前面補(bǔ)充size字段.  回復(fù)  更多評(píng)論   

# re: 如何定義變長的TLV結(jié)構(gòu)體? 2012-06-17 21:45 Antony

樓主是在搞ASN.1? 這個(gè)不是可以用snacc 之類的搞出來  回復(fù)  更多評(píng)論   

# re: 如何定義變長的TLV結(jié)構(gòu)體? 2012-06-21 10:13 MrRightLeft

@Antony
不是呢  回復(fù)  更多評(píng)論   

<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

導(dǎo)航

統(tǒng)計(jì)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产日韩一区二区三区在线| 欧美在线视频免费| 午夜在线不卡| 午夜精品福利视频| 久久色在线观看| 亚洲韩国精品一区| 久久综合激情| 免费视频久久| 亚洲精品一区在线观看| 亚洲一区二区视频在线观看| 羞羞漫画18久久大片| 老鸭窝亚洲一区二区三区| 欧美激情2020午夜免费观看| 欧美视频精品一区| 很黄很黄激情成人| 99在线热播精品免费| 久久岛国电影| 亚洲人午夜精品| 欧美一区视频| 欧美日韩精品三区| 黑人巨大精品欧美黑白配亚洲| 亚洲美女在线国产| 欧美在线一二三四区| 亚洲国产天堂久久国产91| 亚洲欧美www| 免费试看一区| 国产亚洲免费的视频看| 亚洲少妇自拍| 欧美韩国日本一区| 午夜精品久久久久久久久久久久久| 久久在精品线影院精品国产| 国产精品久久久久婷婷| 亚洲国产色一区| 久久国产黑丝| 一本色道久久综合亚洲精品不卡| 久久久久亚洲综合| 国产欧美亚洲视频| 这里只有精品电影| 欧美成人精品1314www| 午夜精品久久久久影视| 欧美婷婷在线| 日韩小视频在线观看| 美女被久久久| 久久国产精品色婷婷| 国产精品夜夜夜| 亚洲视频在线二区| 亚洲精品在线观看视频| 免费观看欧美在线视频的网站| 国产伦精品免费视频| 亚洲愉拍自拍另类高清精品| 最新日韩中文字幕| 美女亚洲精品| 亚洲国产精品www| 另类欧美日韩国产在线| 久久精品首页| 激情综合五月天| 久久伊人精品天天| 久久琪琪电影院| 影音先锋日韩精品| 欧美激情日韩| 欧美成人免费一级人片100| 亚洲人成网站999久久久综合 | 欧美日韩一级大片网址| 欧美电影电视剧在线观看| 亚洲二区视频| 亚洲国产成人精品女人久久久 | 欧美制服丝袜第一页| 国产日韩亚洲欧美综合| 久久久久女教师免费一区| 久久精品国产亚洲精品| 一区二区三区在线视频观看 | 欧美高清免费| 欧美激情bt| 正在播放亚洲一区| 亚洲影院色在线观看免费| 国产伦精品一区二区三区| 久久www成人_看片免费不卡| 欧美一区亚洲二区| 91久久精品日日躁夜夜躁国产| 亚洲福利av| 国产精品地址| 久久婷婷麻豆| 欧美精品亚洲精品| 性欧美xxxx大乳国产app| 久久精品免费观看| 亚洲精品资源| 亚洲欧美精品| 亚洲欧洲精品一区二区三区不卡 | 久久人人爽人人爽爽久久| 亚洲精品偷拍| 亚洲性人人天天夜夜摸| 一区二区在线观看视频| 亚洲久久一区二区| 国产女优一区| 91久久国产精品91久久性色| 国产精品嫩草影院av蜜臀| 久久综合色影院| 欧美日韩在线一区二区三区| 久久久久久电影| 欧美日韩国产色综合一二三四| 久久成人一区二区| 欧美日韩国产高清| 免费一级欧美片在线播放| 国产精品久久一级| 亚洲国产高清一区二区三区| 国产精品一级二级三级| 亚洲人成在线播放| 激情国产一区| 亚洲欧美在线视频观看| 一区二区三区四区国产| 久久人人超碰| 久久精品视频免费观看| 午夜免费在线观看精品视频| 老色鬼久久亚洲一区二区| 亚洲欧美日韩国产综合精品二区 | 国产精品久久久久久久久久ktv| 亚洲成色777777女色窝| 欧美一区在线直播| 蜜桃av综合| 久久夜色精品国产亚洲aⅴ| 欧美日韩国产综合网 | 欧美在线视频a| 欧美日韩另类视频| 亚洲人妖在线| 亚洲卡通欧美制服中文| 久久久亚洲精品一区二区三区 | 亚洲国产成人av| 久久久久久久精| 久久久久久久欧美精品| 国产精品私拍pans大尺度在线 | 久久综合久久综合久久综合| 国产日韩欧美一区二区三区在线观看 | 榴莲视频成人在线观看| 国产欧美激情| 亚洲欧美日韩在线综合| 久久av资源网站| 国产在线乱码一区二区三区| 欧美一级一区| 久久在线免费视频| 精品9999| 欧美大片在线观看| 最近中文字幕日韩精品| 99国产精品视频免费观看一公开 | 久久激情五月激情| 免费久久精品视频| 亚洲高清不卡一区| 欧美成人免费全部观看天天性色| 亚洲国产激情| 在线亚洲成人| 国产精品老女人精品视频| 亚洲一区精彩视频| 久久精品国产99| 在线播放豆国产99亚洲| 奶水喷射视频一区| 99热免费精品在线观看| 亚洲欧美日韩中文视频| 国精品一区二区三区| 狼人社综合社区| 日韩亚洲国产欧美| 久久精品99国产精品| 91久久久亚洲精品| 欧美性大战久久久久久久蜜臀| 亚洲欧美韩国| 亚洲欧美另类国产| 亚洲毛片av| 午夜精彩国产免费不卡不顿大片| 国产麻豆精品theporn| 久久亚洲私人国产精品va媚药| 亚洲国产天堂久久国产91| 午夜精品久久久久久久久久久久| 韩国女主播一区| 欧美日韩黄色一区二区| 欧美一区二区私人影院日本| 91久久香蕉国产日韩欧美9色 | 亚洲欧美另类在线| 怡红院精品视频| 国产精品videosex极品| 久久亚洲综合色| 亚洲亚洲精品三区日韩精品在线视频| 久久欧美肥婆一二区| 亚洲午夜国产成人av电影男同| 国内精品嫩模av私拍在线观看| 欧美精品一区二区三区四区| 欧美一区二区三区在线| 亚洲美女黄网| 亚洲电影观看| 久久久亚洲人| 亚洲嫩草精品久久| 亚洲精品日韩在线观看| 国产亚洲精品一区二555| 欧美三级第一页| 女生裸体视频一区二区三区| 欧美一区二区三区的| 一区二区三区精密机械公司| 亚洲大片在线观看| 久久综合五月| 久久久久久久波多野高潮日日| 性欧美18~19sex高清播放| 亚洲无线观看| 亚洲图中文字幕|