C++ 如何将char*复制到向量<;char>;然后取回它?
我有C++ 如何将char*复制到向量<;char>;然后取回它?,c++,stl,C++,Stl,我有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 ???? inti=0; 向量温度//复制缓冲区 而(i我认为填
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 ????
inti=0;
向量温度//复制缓冲区
而(i我认为填充向量的最简单方法是使用构造函数:
vector<char> temp(RecBuffer, RecBuffer + *packetLength);
注:数据仅在C++11
中可用。如果您不使用新标准编译,请使用@juanchopanza建议的&temp[0]
。我认为填充向量的最简单方法是使用构造函数:
vector<char> temp(RecBuffer, RecBuffer + *packetLength);
注意:数据仅在C++11
中可用。如果您不使用新标准编译,请使用@juanchopanza建议的&temp[0]
。您可以这样说
RecBuffer = temp.data();
或
如果您没有c++11支持
但是您必须注意,当向量超出范围时,数据将被删除。如果向量的大小被调整,您还将得到一个悬空指针。您可以这样说
RecBuffer = temp.data();
或
如果您没有c++11支持
但您必须注意,当向量超出范围时,数据将被删除。如果向量的大小被调整,您还将得到一个悬空指针。您可以使用std::vector
的构造函数从RecBuffer
复制数据:
std::vector<char> temp(RecBuffer, RecBuffer + *PacketLength);
当然,一旦temp
被销毁,基础数组就不再存在。您可以使用std::vector
的构造函数从RecBuffer
复制数据:
std::vector<char> temp(RecBuffer, RecBuffer + *PacketLength);
当然,一旦temp
被销毁,底层数组就不再存在了。我觉得执行以下操作会更安全
free(RecBuffer);
RecBuffer = (char *) malloc(sizeof(char) * packetLength);
memcpy(RecBuffer, temp.data(), packetLength);
我觉得执行以下操作会更安全
free(RecBuffer);
RecBuffer = (char *) malloc(sizeof(char) * packetLength);
memcpy(RecBuffer, temp.data(), packetLength);
尝试查找std::vector
的方法,看看是否有有用的东西
中有一些算法非常有用。
std::复制(临时开始(),临时结束(),RecBuffer);
你可以走很长的路:
const unsigned int length = temp.size();
for (unsigned int i = 0; i < packetLength)
{
RecBuffer[i] = temp[i];
}
const unsigned int length=temp.size();
for(无符号整数i=0;i
尝试查找std::vector的方法,看看是否有有用的东西
中有一些算法非常有用。
std::复制(临时开始(),临时结束(),RecBuffer);
你可以走很长的路:
const unsigned int length = temp.size();
for (unsigned int i = 0; i < packetLength)
{
RecBuffer[i] = temp[i];
}
const unsigned int length=temp.size();
for(无符号整数i=0;i
RecBuffer的定义是什么?RecBuffer的定义是什么?RecBuffer
?这是迄今为止最好的答案。如果向量已经被定义,请不要忘记std::vector::assign
成员函数constructed@111111是的,但他的用例似乎不需要这个。不过你提到它还是很好的。@111111耶啊,这没有被提及。谢谢你(1;)这是迄今为止最好的答案。如果向量已经被指定,不要忘记std::vector::assign
成员函数constructed@111111是的,但是他的用例似乎不需要这个。你提到它还是很好的。@111111是的,这没有被提及。谢谢你+1;)无法从“std::vector*”转换为“char*”+1太好了,你提到数据只能在C++11
中工作。无法从“std::vector*”转换为“char*”+1太好了,你提到数据只能在C++11
中工作,我忘了提到这一点。