操纵nsmutabledata

时间:2012-02-26 20:57:08

标签: iphone ios nsdata

您好我正在尝试创建一个我想通过网络发送到服务器的数据包,我几乎已经将数据包排序但是它缺少一个长度标识符,我需要在我的方法结束时计算并添加进入数据包。

数据包结构就像这样

  • 主要值标识符(UInt16)
  • 内容大小(UInt32)
  • 包内容(字符串)

目前我的方法看起来像这样

- (NSMutableData *) addRegCode
{
    //Supply some default string for testing
    NSString *regCode = [[NSString alloc] initWithString:@"abcd1"];
    //create NSData object
    NSData *registrationCodeData = [regCode dataUsingEncoding:NSUTF8StringEncoding];

    NSMutableData * RegistrationCodeMutableData = [[NSMutableData alloc] init]; //send this object
    //create leading value
    UInt16 leadingValue = 8;
    NSData * leadingValueData = [[NSData alloc] initWithBytes:&leadingValue length:sizeof(leadingValue)];

    //append data to mutableData
    [RegistrationCodeMutableData appendData:leadingValueData];
    [RegistrationCodeMutableData appendData:registrationCodeData];

    return RegistrationCodeMutableData;
}

我想知道的是如何计算 registrationCodeData 的大小,然后在我附加 leadingValueData&的位置之间添加它。 registrationCodeData

我想我必须使用 dataWithBytes:length:,但我不是100%肯定如何使用这个

1 个答案:

答案 0 :(得分:1)

这应该这样做。

NSUInteger size = [registrationCodeData length];
NSData *sizeData = [NSData dataWithBytes:&size length:sizeof(size)];
[RegistrationCodeMutableData appendData:leadingValueData];
[RegistrationCodeMutableData appendData:sizeData];
[RegistrationCodeMutableData appendData:registrationCodeData];

另外注意使用大写字母来启动变量名称有点不典型,可能会令人困惑阅读!