2012-02-26 56 views
1

嗨我想创建一个数据包,我想通过网络发送到服务器,我几乎得到的数据包排序,但缺少一个长度标识符,我需要在我的方法结束时计算并添加到数据包中。操纵nsmutabledata

包结构是这样的

  • 领先的值标识符(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之间添加:长度:但我米100%不知道如何使用这个

+0

所以我有这个** NSData * registrationCodeSize = [NSData dataWithBytes:registrationCodeData length:???]; **但是,我不知道该把长度放在问号上。 – 2012-02-26 21:03:59

回答

1

这应该这样做。

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

也使用大写字母开始变量名称的注意是有点不典型,可以混淆阅读!

+0

谢谢你,是的,我通常开始我的变化无帽..但这些是我的数据库的请求名称,并希望他们是可识别的..但我想我会改变为非帽..感谢您的帮助完美工作。 – 2012-02-26 21:26:16