当前位置: 代码迷 >> Iphone >> 关于怎么构建udp数据包数据部分的有关问题
  详细解决方案

关于怎么构建udp数据包数据部分的有关问题

热度:75   发布时间:2016-04-25 06:12:44.0
关于如何构建udp数据包数据部分的问题
现有如下要求:
udp数据包数据部分的结构格式如下:

字段        长度          数据类型           备注
identifier  8   Char                       固定为:ABCDEFGH
Length  4   Int                      不足在后面补0
Phonenum  16        Char                      不足在后面补0
Password  16        Char                      不足在后面补0
Command  4    Int                      1001
Sn          4      Int                      命令序列号,由发送端产生,响应端返回时,用于判断该返回是针对哪个命令。
Param 不限  Char                      根据命令不同,值也不同
CRC          4         Int                        CRC32校验位

我用的是如下结构体来构建的,不知道对不对

typedef struct  {
    char identifier[8];
    int length;
    char phonenum[16];
    char password[16];
    int command;
    int sn;
    char param[1];
    int crc; 
}udpdata;

给param将要赋值一个字母,所以我建立的为1个字节;如果param为可变的,我该如何创建?
我接着创建了一个udpdata *senddata;
对senddata各个成员采用如下方式赋值的
    senddata=malloc(sizeof(udpdata));
    memset(senddata, 0, sizeof(udpdata));
    memcpy(senddata->identifier, "ABCDEFGH",8);
    memcpy(senddata->phonenum, "12345678900",11);
    memcpy(senddata->password, "123456",6);
    memcpy(senddata->param, param, strlen(param));
    senddata->command=command;
    senddata->sn=1;
    senddata->length=sizeof(*senddata);

    char buf[sizeof(*senddata)];
    memset(buf, 0, sizeof(*senddata));
    memcpy(buf, senddata, sizeof(*senddata));
    CRC *crc=[[CRC alloc] init];
    senddata->crc=[crc udp_crc32: buf        Length: sizeof(*senddata)-4];
CRC,是我写的另一个类,暂时可先不管它的对错。
   
上面有几个字段要求“不足在后面补0”,不知道怎么补?
如果udp数据部分接口创建并赋值好了,那又该如何将其转换为可发送出去的数据呢,比如转换为NSData?里面主要是包含有那个int型的字段,怎么转换,一般转换为什么样的格式。。。。。

菜鸟请教各位了~~~谢谢!十万火急
------最佳解决方案--------------------
这种协议就得逐个字节对,另外补零是针对字符串,整形不可能补零
变长数组需要在协议中指定长度,这种协议的一般格式是 协议类型,数据长度,数据,其中数据还可以再嵌套
------其他解决方案--------------------
  相关解决方案