2014-10-30 2 views
2

mem 버퍼에서 벡터로 이진 데이터를 복사하려고합니다. 첫 번째 unpackDataArray() 0std :: 메모리 버퍼에서 벡터로 복사

int AhaConnectAPI::unpackDataArray(uint8_t* src, vector<uint64_t> dest, uint32_t destvectorSize, int offset) 
{ 

    cout<<"\nstd::copy"; 
    std::copy(src + offset, src + offset + sizeof(uint64_t) * length, back_inserter(dest)); 
    return length * 8; 
} 

또는

int AhaConnectAPI::unpackDataArray(uint8_t* src, vector<uint64_t> dest, uint32_t destvectorSize, int offset) 
{ 

    uint64_t element; 

    for(unsigned int i = 0 ; i<destvectorSize; i++) 
    { 
     offset = unpackData(src, element, offset); 
     dest.push_back(element); 
    } 

    return dest.size() * sizeof(uint64_t); 

} 
+4

... 값으로 '벡터'를 사용합니까? – Columbo

+1

제안 : src를 수정하지 않으면 const에 대한 포인터로 전달하십시오. –

답변

2

시도 나를 folloowing에 어떤 문제가 있는지 알 수

마다 주시기 바랍니다 내가 얻고 벡터 크기 : 당신의 src 유형이 uint8_t*이지만 을 std::copy,을 사용합니다.및 offsetint입니다. 다음과 같이 시도하십시오 :

std::copy(static_cast<uint64_t*>(src) + 
       static_cast<uint64_t>(offset), 
      static_cast<uint64_t*>(src) + 
       static_cast<uint64_t>(offset) + sizeof(uint64_t) * length, 
      back_inserter(dest)); 

offset 자세한 조정이 필요할 수 있습니다. 또한 length이 갑자기 나타납니다.

+0

컴파일이 확실합니까? –

+0

Length는 외부에서 전달되는 벡터의 요소 중 no를 의미합니다. –

+0

@MarshelAbraham'uint64_t'의'uint8_t' 요소는 무엇입니까? –

1

이 시도 :

int AhaConnectAPI::unpackDataArray(uint8_t* src, vector<uint64_t>& dest, 
            uint32_t destvectorSize, int offset) 

당신은 참조로 vector을 전달해야합니다 (& 주)를.

+0

입니다. 좋은 소리로 알려 드리겠습니다. :) thanks –

관련 문제