Нужна помощь в преобразовании массива uint8_t в NSMutableData - PullRequest
3 голосов
/ 05 мая 2011

Я пытаюсь перенести некоторый код объективного c (mac) в код c ++ (win). Однако у меня есть проблема. На Mac мои данные поступают как объект NSMutableData, а в Windows - как массив uint8_t. Мне нужно преобразовать мои данные uint8_t в тот же тип данных, который находится внутри NSMutableData. Помогите!

//on the mac
foo(NSMutableData* received)
{
   void* data = malloc([received length]);
   memcpy(data, [received mutableBytes], [received length]);

   bar(data);
}

//on windows
foo(const boost::shared_array<uint8_t>& received)
{
   void* data = ... //magic needs to happen here 

   bar(data);
}

Ответы [ 2 ]

0 голосов
/ 05 мая 2011

э; в Windows не существует такого объекта, как объект NSMutableData, поэтому вам нужно будет более точно указать, в каком формате он вам нужен.

Согласно Apple Docs NSMutableData является буфером байтовых данных; ну, это и есть массив uint8_t. Если они оба принимают массив этих данных, вы можете просто передать указатель на блок.

На самом деле, было бы гораздо разумнее преобразовать объект NSMutableData в указатель uint8_t, чем наоборот, поскольку, скорее всего, это то, что у вас внутри MutableData.

Надеюсь, что поможет

0 голосов
/ 05 мая 2011

Ожидает ли bar получить блок памяти, которым он будет владеть и освободить себя, как показывает ваш пример на Mac?

void *data = malloc(received_size); //shared_array can't give you the size info
memcpy(data,received.get(),received_length);
bar(data);

Если bar не вступает во владение памятью, вы можете просто передать данныебез копий:

void *data = static_cast<void*>(received.get());
...