最近,我一直在尝试更新一些代码以利用标准C++库函数,而不是旧的C样式函数。特别是,我尝试执行以下操作(为简单起见,使用人工工作示例-我知道代码很丑陋,但它简洁地说明了问题):
std::vector<int> vData;
vData.push_back(10990);
vData.push_back(11990);
vData.push_back(12990);
vData.push_back(13990);
unsigned char szBuffer[100];
memset(szBuffer,0,sizeof(szBuffer));
std::copy(vData.begin(),vData.end(),szBuffer);
我期望它的行为与我尝试替换的代码类似:
memcpy(szBuffer,&vData[0],sizeof(int)*vData.size());
但是调试该代码后,很明显,我编写的
std::copy
代码仅写入unsigned char
缓冲区的前4个字节,而不是 vector 中4个整数的完整位模式。有人可以告诉我我做错了什么吗,还是仅仅是我不能以这种方式使用std::copy
而应该坚持使用memcpy
? 最佳答案
坚持memcpy
,std::copy
是智能的,它了解所涉及的类型,并且正在使用标准转换将int
正确转换为unsigned char
。 memcpy
是无知的,这就是您想要的。
关于c++ - 我可以使用std::copy将数据的位模式从整数 vector 复制到无符号char数组中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13047576/