1

私はchar *RecBufferint *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 ????
4

5 に答える 5

8

ベクトルを設定する最も簡単な方法は、コンストラクターを使用することだと思います。

vector<char> temp(RecBuffer, RecBuffer + *packetLength);

それを取り戻すには、次のメソッドを使用しますdata

RecBuffer = temp.data();

注:新しい標準を使用してコンパイルしない場合にdataのみ使用できます。@juanchopanza の提案に従って使用してください。C++11&temp[0]

于 2013-02-15T15:44:16.967 に答える
3

あなたは言えた

RecBuffer = temp.data();

また

RecBuffer = &temp[0];

C++11 をサポートしていない場合。

ただし、ベクトルが範囲外になるとデータが削除されることに注意する必要があります。ベクトルのサイズが変更されると、ダングリング ポインターも取得されます。

于 2013-02-15T15:44:20.930 に答える
1

のコンストラクターを使用して、std::vectorからデータをコピーできRecBufferます。

std::vector<char> temp(RecBuffer, RecBuffer + *PacketLength);

std::vector::data次に、基になる配列へのアクセスを取得するために使用できます。

RecBuffer = temp.data();

もちろん、基礎となる配列は一度temp破棄されると存在しなくなります。

于 2013-02-15T15:44:33.353 に答える
0

のメソッドを調べて、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];
}
于 2013-02-15T15:48:57.733 に答える
-1

以下を実行する方が安全だと思います

free(RecBuffer);
RecBuffer = (char *) malloc(sizeof(char) * packetLength);
memcpy(RecBuffer, temp.data(), packetLength);
于 2013-02-15T15:45:27.840 に答える