现有如下要求:
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型的字段,怎么转换,一般转换为什么样的格式。。。。。
菜鸟请教各位了~~~谢谢!十万火急
------最佳解决方案--------------------
这种协议就得逐个字节对,另外补零是针对字符串,整形不可能补零
变长数组需要在协议中指定长度,这种协议的一般格式是 协议类型,数据长度,数据,其中数据还可以再嵌套
------其他解决方案--------------------