我有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
仅C++11
在您不使用新标准编译的情况下可用,请&temp[0]
按照@juanchopanza 的建议使用。
你可以说
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);