2011-08-03 1 views
0

다른 데이터 형식의 인수를 캐스팅하고 저장하는 제네릭 함수를 vector<char>에 작성하려고합니다. 캐스팅은 비트 표현이 문자 벡터 내에서 유지된다는 의미입니다. 예를 들어 0x19a4f607과 같은 4 바이트 intvc[0] = 0x19, vc[1] = 0xa4, vc[2] = 0xf6vc[3] = 0x07으로 벡터에 저장됩니다.다른 유형의 데이터를 벡터 <char>에 저장 하시겠습니까?

여기까지 지금까지 작성한 내용이 있지만 세그먼트 오류가 발생합니다. 어떻게하면이 문제를 해결할 수 있을지 생각해?

template <class T> 
void push_T(vector<char>& vc, T n){ 
    char* cp = (char*)&n; 
    copy(cp, cp+sizeof(T), vc.end()); 
} 
+1

.... 당신이 첫번째 장소에있는 타입 시스템을 전복에 대한 좋은 이유가 가정합니다? 일련 번호를 지정하려고하십니까? –

+0

맞습니다. 어떤 순서로 어떤 데이터를 인코딩했는지 알기 때문에 데이터를 디코딩하는 방법에 대해 걱정할 필요가 없습니다. – Pirooz

+0

char 대신에 unsigned char을 사용하여 주소 조작을 사용하는 것이 좋으며, 서명 된 데이터는 의미가 없습니다. – sarat

답변

1

벡터의 끝에 삽입 할 수있는 반복기가 필요합니다. .begin().end()은 기존 요소를 수정할 수 있습니다. 시도하십시오 std::back_inserter(vc).

1

여기서 바로 당면한 문제는 벡터의 크기를 조정하지 않았으므로 기본 배열의 끝을 즉시 써 버리는 것입니다. copy() 호출 앞에 vc.resize(vc.size() + sizeof(T))을 입력하거나 std::back_inserter 삽입 반복기를 사용하여 사본에서 push_back() 비헤이비어를 강제 실행해야합니다.

이제

, 어떻게 당신이 모든 것을 넣어 일단 벡터의 내용을 이해 할 계획