IOS 创建TLV数据流

来源:互联网 发布:ip提取器源码 编辑:程序博客网 时间:2024/03/29 19:48

       进入新的公司后需要用到tlv格式的数据流,简单的说tlv数据格式就是在一段固定长度字节的数据中填充相应的内容,并且该数据流的每一个特定段的内容按照服务器需要来填充,服务器可以读取,网上查了下说这种数据是最合适计算机读取的格式,所以读取的速度是最快的。

之前只弄过OC和C#,查了下OC中使用TLV完全找不到(个人水平有限,不好意思了=,=,以后还要继续努力啊)。还好OC支持C++和C语言,所以问了下做C++的同事,然后他帮我使用C的函数实现了TLV数据流的创建,对亏这位同事帮我节省了不少时间,自己弄不知道要弄多久。以上。

下面我们就直接上代码看看使用c的方式来创建数据流。

typedef struct{    Byte         type;    Byte      message;    short      headlen;    char      user[32];    char     sessin[32];}mySender;typedef struct {    mySender header;    Byte nodetype;    char nodever[128];}msg_m_reg;



  首选先创建一个组合体,组合体就按照我们的流所需要的顺序来存放并且给其分配相应的大小字节。


接下来就是创建对象,填充组合体,让后转为Byte,再转为data发送

static int isession = 0;    mySender header = {0};    header.type = 1;    header.message=1;    sprintf(header.sessin,"%d",isession);    header.headlen = ntohs(197);        msg_m_reg newsennd = {0};    memcpy(&newsennd.header, &header,68);    newsennd.nodetype = 1;    sprintf(newsennd.nodever, "%s", "1.1");        Byte sendbyte[197] = {0};    memcpy(sendbyte, &newsennd, 197);        NSData *lastdata = [[NSData alloc] initWithBytes:sendbyte length:197];




这其中比较重要函数就是 memcpy(),这个函数可以把一个内存的内容按照字节顺序重头到尾填入。

同样接受TLV数据的时候也可以用同样的方法来接收

以上便是一些经验的分享,有不对的地方还希望能提出来大家一起交流,谢谢。



0 0
原创粉丝点击