最近,我一直在尝试更新一些代码以利用标准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

最佳答案

坚持memcpystd::copy是智能的,它了解所涉及的类型,并且正在使用标准转换将int正确转换为unsigned charmemcpy是无知的,这就是您想要的。

关于c++ - 我可以使用std::copy将数据的位模式从整数 vector 复制到无符号char数组中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13047576/

10-11 17:51