2011-05-05 67 views
3

我想將一些Objective-C代碼(mac)移植到C++代碼(win)。但是,我有一個問題。在Mac上,我的數據以NSMutableData對象的形式出現,在Windows上以uint8_t數組的形式出現。我需要將我的uint8_t數據轉換爲NSMutableData中相同類型的數據。幫幫我!需要幫助將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); 
} 

回答

0

是否酒吧預計會得到一個內存塊,它將擁有和釋放自己作爲你的Mac示例指示?

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

如果欄不佔用內存的所有權,那麼你可以將數據傳遞給它不進行復制:

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

恩;在Windows上不存在NSMutableData對象這樣的事情,所以您最終必須更加具體地瞭解您需要的格式。

根據apple文檔NSMutableData是字節數據的緩衝區;那麼,這也是一個uint8_t數組。如果它們都只是假設一組數據,那麼你只需將指針傳遞給塊即可。

實際上,將NSMutableData對象轉換爲uint8_t指針會比其他方式更有意義,因爲可能這就是您在MutableData中所擁有的內容。

希望可以幫到