2012-02-29 2 views
0

Я делаю запрос к моей базе данных, и в ответ я получаю кучу данных, которые я помещаю в объект nsdata, используя методы NSURLConnection.Как получить значения из объекта NSData

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    // Append the new data to receivedData. 
    // receivedData is an instance variable declared elsewhere. 
    [receivedData appendData:data]; 
} 

Данные объекта NSData имеет значение идентификатора для каждого участка кода ИТС, представленного переменной UInt16 1-то, что когда-либо ..

Я хотел бы знать, как я мог identifiy эти значения, то начать декодирование данных.

Мой план состоит в том, чтобы создать класс с использованием метода, в котором я передаю данные из метода выше. Метод приема затем разделит пакет и, скорее всего, передаст каждый раздел в соответствующий метод, который затем может его декодировать и/или выполнить проверку на нем и т. Д.

Я просто не знаю, как я могу определить эти ведущие значения которые представляют собой представления данных переменных UInt16.

Надеюсь, у меня есть смысл, если вы можете сделать некоторые предложения или примерный код, который был бы потрясающим!

+0

Вам нужно узнать больше о указателях в C ... Вы можете получить доступ к указателю на байты с [полученными байтами данных] и оттуда получить доступ к элементу любого размера при любом смещении –

+1

или вы можете преобразовать NSData в NSString ... кстати, каков ваш ответ ???? –

+0

ah right .. Я рассматривал возможность превращения его в строку, но не был уверен, что это последствия. мой ответ представляет собой смесь беззнаковых 32-битных целых чисел и строк. каждому значению предшествует номер значения, затем длина строки (если ее строка), затем строка или значение без знака .. Это то, что вы имели в виду? –

ответ

1

Учитывая структуру данных, вам необходимо проанализировать ее вручную. Используйте -[NSData getBytes:range:] в цикле для повторения данных и извлечения компонентов. Не забудьте использовать семейство макросов NSSwap...ToHost() для преобразования закодированных чисел в собственный порядок байтов.

Редактировать: посмотреть документацию и заголовки для NSSwapLittleIntToHost() и NSSwapBigIntToHost(). Это две из многих функций, которые преобразуют внешнее двоичное числовое представление в собственный порядок байтов процессора и наоборот.

+0

awesome! это действительно звучит как материал, который я хочу делать. Я не уверен, что ваша последняя строка означает (не забудьте использовать семейство макросов NSSwap ... ToHost() для преобразования закодированных чисел в собственный байт порядок.) Если у вас есть добавленные слова для этого, которые помогут, но сейчас я начну исследовать это. :) Огромное спасибо. –

+0

@ C.Johns Я добавил немного больше информации о функциях порядка байтов. – Costique