3

我正在尝试将一些objective-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);
}
4

2 回答 2

0

正如您的 Mac 示例所示,bar 是否希望获得它将拥有并释放自己的一块内存?

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());
于 2011-05-05T19:17:38.153 回答
0

呃; Windows 上没有 NSMutableData 对象之类的东西,因此您必须更具体地了解最终需要它的格式。

根据苹果文档 NSMutableData 是字节数据的缓冲区;好吧,这也是一个 uint8_t 数组。如果它们都只是假设该数据的数组,那么您只需将指针传递给块。

实际上,将 NSMutableData 对象转换为 uint8_t 指针比反过来更有意义,因为无论如何这可能就是 MutableData 中的内容。

希望有帮助

于 2011-05-05T19:26:05.017 回答