Извлечение двоичных данных из объекта NSData - PullRequest
4 голосов
/ 03 мая 2011

У меня есть объект NSData с порцией двоичных данных, и я пытаюсь использовать getBytes: range: для установки примитива.

Я могу сделать это:

NSData* data = [...get record from file...]
double value = 0;
[data getBytes:&value range:NSMakeRange(42, 8)];
[someObject setValue:value];

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

Есть ли простой способ (objc или c) извлечь байты из объекта NSData, привести эти байты к некоторому примитивному значению и присвоить его объекту без использования какого-либо временного?

Спасибо!

1 Ответ

6 голосов
/ 03 мая 2011

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

UInt8 *rawData = [theData bytes];
[someObject setValue:*((double*)(&rawData[42]))];

Это требует большого количества приведения, но вам нужно использовать только одну временную переменную вместо одной для каждого типа данных, и это будет немного быстрее, поскольку вы не будете постоянно запрашивать объект NSData для определенного диапазона данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...