манипулирование nsmutabledata - PullRequest
       6

манипулирование nsmutabledata

1 голос
/ 27 февраля 2012

Привет! Я пытаюсь создать пакет, который я хочу отправить по сети на сервер. Я отсортировал пакет, но в нем отсутствует идентификатор длины, который мне нужно вычислить в конце метода и добавить в пакет.

Структура пакета выглядит следующим образом

  • идентификатор ведущего значения (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 , а затем добавить его между тем местом, куда я добавляю adingValueData & registrationCodeData

Я думаю, что должен использовать dataWithBytes: length: , но я не уверен на 100%, как использовать это

1 Ответ

1 голос
/ 27 февраля 2012

это должно сделать это.

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

также примечание, что использование заглавных букв для начала имен переменных немного нетипично и может сбивать с толку!

...