2014-01-26 2 views
0

이것은 새로운 질문 게시를 보증하기에 충분하지만 다른 사람이 here이라고 게시 한 질문에 대한 후속 질문입니다.C++ - 서명되지 않은 char *을 새로운 unsigned char * 배열로 복사

나는 OpenCV (cv::Mat) 행렬 변수 (알려진 크기의 단지 unsigned char *)입니다. 예상대로이 작동

int initial_offset = 10; 
unsigned char *r_record = new unsigned char[1024](); 
std::copy(title.begin(), title.end(), r_record + initial_offset); 

을 : 나는 코드를 사용하여 내 unsigned char* 배열에 std::string를 복사 참조 된 문제의 답을 사용했다. 하지만 지금은 cv::Mat 변수의 각 행을 반복하고 그 부호없는 char 값을 동일한 r_record 배열에 삽입하고 싶습니다.

나는 코드가 있습니다

int data_offset = TITLE_OFFSET + 1; 
cv::Mat &img = <from somewhere else> 

for (int row=0; row<=img.rows; row++) { 
     unsigned char* i_row = img.row(row).data; 
     std::copy(???, ???, r_record + data_offset); 
     data_offset += img.cols; //This happens to be += 32 in every case that I am using 
} 

을하지만 난 i_row 데이터를 참조 할 ??? 대신에 어떤 일이 일어 나는지 모르겠어요. 이 작업을 수행 할 수 있습니까?

또한 분명히 new unsigned char[1024]()을 사용하는 것은 좋지 않지만, 뭔가 대체 할 방법이 확실하지 않습니다. 아니요,이 좋지 않습니다.

업데이트 :

아래 확실히 작동하지 @juanchopanza의 응답처럼 보인다.

std::string = "Title 1"; 
cv::Mat mat = <from somewhere else>; 

//Test case 
desc.data[1] = (unsigned char)65; 

//Write the image information to the database 
unsigned char *image_record = new unsigned char[1024](); 
std::copy(title.begin(), title.end(), r_record + title_offset); 
std::copy(mat.begin<unsigned char>(), mat.end<unsigned char>(), r_record + 33); 

그러나 상관없이 무엇 r_record에만 포함되어 있습니다 : 여기 내가 가진 무엇 "Title 1". 누구든지 아이디어가 있습니까? 이 같은

답변

2

뭔가 :이

std::copy(img.begin<unsigned char>(), img.end<unsigned char>(), r_record + data_offset); 
+0

, 각 행을 반복 할 이유가있다? 그것은 (이 솔루션을 더 좋게 만드는) 그것처럼 보이지 않습니다. – Brett

+0

@Brett 필요에 따라 요소를 복사합니다. 행에 대한 루프가 필요 없습니다. – juanchopanza

+0

예상되는 결과가 나타나지 않습니다. 내 코드를 좀 더 업데이트하여 게시물을 업데이트했습니다. 어떤 아이디어? – Brett

관련 문제