2011-05-05 7 views
3

일부 objective-c 코드 (Mac)를 C++ 코드 (win)로 이식하려고합니다. 그러나, 나는 문제가있다. 맥에서 내 데이터는 NSMutableData 객체로 들어오고 윈도우에서는 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

bar는 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 객체와 같은 것이 없으므로 결국에는 필요한 형식에 대해보다 구체적으로 설명해야합니다.

사과 문서에 따르면 NSMutableData는 바이트 데이터의 버퍼입니다. uint8_t 배열도 마찬가지입니다. 그들은 둘 다 그냥 그 데이터의 배열을 가정하면 다음 블록에 포인터를 전달할 수 있습니다.

사실 NSMutableData 객체를 다른 방법보다 uint8_t 포인터로 변환하는 것이 훨씬 의미가 있습니다. 어쨌든 MutableData 내부에 가지고있는 가능성이 높기 때문입니다.

희망하는 사람

관련 문제