私はchar *RecBuffer
、int *packetLength
データとサイズを指しています
int i=0;
vector<char> temp;//copy the buffer
while(i<*packetLength)
{
temp.push_back(*(RecBuffer+i));
i++;
}
...do something
//retrieve it now
RecBuffer = temp ????
ベクトルを設定する最も簡単な方法は、コンストラクターを使用することだと思います。
vector<char> temp(RecBuffer, RecBuffer + *packetLength);
それを取り戻すには、次のメソッドを使用しますdata
。
RecBuffer = temp.data();
注:新しい標準を使用してコンパイルしない場合にdata
のみ使用できます。@juanchopanza の提案に従って使用してください。C++11
&temp[0]
あなたは言えた
RecBuffer = temp.data();
また
RecBuffer = &temp[0];
C++11 をサポートしていない場合。
ただし、ベクトルが範囲外になるとデータが削除されることに注意する必要があります。ベクトルのサイズが変更されると、ダングリング ポインターも取得されます。
のコンストラクターを使用して、std::vector
からデータをコピーできRecBuffer
ます。
std::vector<char> temp(RecBuffer, RecBuffer + *PacketLength);
std::vector::data
次に、基になる配列へのアクセスを取得するために使用できます。
RecBuffer = temp.data();
もちろん、基礎となる配列は一度temp
破棄されると存在しなくなります。
のメソッドを調べて、std::vector
何か便利なものがないか調べてみてください。
<algorithm>
便利なアルゴリズムがいくつかあります。
std::copy(temp.begin(), temp.end(), RecBuffer);
あなたはそれを長い道のりで行うことができます:
const unsigned int length = temp.size();
for (unsigned int i = 0; i < packetLength)
{
RecBuffer[i] = temp[i];
}
以下を実行する方が安全だと思います
free(RecBuffer);
RecBuffer = (char *) malloc(sizeof(char) * packetLength);
memcpy(RecBuffer, temp.data(), packetLength);