2012-02-26 33 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