2012-02-26 1 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:???]; **しかし、長さの疑問符に何を入れるべきかわかりません。 –

答えて

1

これはそれを行うべきです。

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

また、大文字を使用して変数名を開始すると、少し異型で読みにくいことがあります。

+0

それに感謝して、私は通常、キャップなしで私のvaraibleを開始..しかし、これらは私のDBに要求名であり、それらが識別可能になりたかった..しかし、私は非キャップに変更すると思う..ヘルプは完璧に働いた。 –