码迷,mamicode.com
首页 > 编程语言 > 详细

BerTLV 的C++实现

时间:2015-04-24 12:10:54      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

我写了一个实现能够进行BerTLV大部分操作的C++类,代码如下:

https://github.com/vsuu/elib/blob/master/elib2014/BerTLV.h

这个实现用迭代器统一了数组与流,所以本类可以接受数组输入或流输入。

 

操作示例:

void TestBerTLV()
{
    try
    {
        TagType tag;
        char * tagstr = "\x70\x80";
        char * tagstr1 = "\x1F\x70";
        BerTLV::ParseTag(tagstr, tagstr + 2, tag);
        assert(tag == 0x70);
        BerTLV::ParseTag(tagstr1, tagstr1 + 2, tag);
        assert(tag == 0x1F70);

        uint32_t len;
        char *lenstr = "\x81\x10";
        char *lenstr2 = "\x79\x10";
        char *lenstr3 = "\x82\x10\x10";
        BerTLV::ParseLen(lenstr, lenstr + 2, len);
        assert(len == 0x10);
        BerTLV::ParseLen(lenstr2, lenstr2 + 2, len);
        assert(len == 0x79);
        BerTLV::ParseLen(lenstr3, lenstr3 + 3, len);
        assert(len == 0x1010);

        BerTLV tlv(0x70);
        tlv.SetValue(HexData("5F340101").ToBin());
        tlv.AppendChild(BerTLV(0x5A, HexData("123456").ToBin()));
        tlv.AppendChild(BerTLV(0xBF0C));
        auto ptr = tlv.FindChild(0xBF0C);
        ptr->AppendChild(BerTLV(0x9F4D, HexData("0B0A").ToBin()));
        tlv.InsertChild(0x9F4D, BerTLV(HexData("95051122334455").ToBin()));

        BinData out_buf;
        BerTLV::EncapTLV(tlv, back_inserter(out_buf));

        cout << out_buf.ToHex().c_str() << endl;

        BerTLV tlv2;
        BerTLV::ParseTLV(begin(out_buf), end(out_buf), tlv2);

        stringstream ss(ios_base::in | ios_base::out | ios_base::binary);
        ss >> noskipws;
        BerTLV::EncapTLV(tlv, ss);

        tlv2.Clear();
        BerTLV::ParseTLV(ss, tlv2);
        out_buf.clear();
        tlv2.EncapTLV(back_inserter(out_buf));
        cout << out_buf.ToHex().c_str() << endl;
    }
    catch (const exception &e)
    {
        cout << "error:" << endl;
        cout << e.what() << endl;
    }
}

 

BerTLV 的C++实现

标签:

原文地址:http://www.cnblogs.com/vsuu/p/4452869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!