我正在编写视频编码器,出于某种原因,我想使用矢量复制缓冲区std::copy
仅复制第一个字符。我的目标是复制缓冲区,然后使用将它们写入文件fwrite
。
我正在使用Google Native Client,该客户端不允许fwrite
直接从主线程访问,因此我创建了一个新线程,必须将缓冲区移至fwrite
我用这个问题标记了多线程,以获取您对这种处理缓冲区的方法的反馈。
std::vector<char> buffer_(4);
char header[4];
header[0] = 'D';
header[1] = 'K';
header[2] = 'I';
header[3] = 'F';
unsigned dataArraySize = sizeof(header) / sizeof(char);
std::copy(&header[0], &header[dataArraySize], buffer_.begin());
std::stringstream ss;
std::string s;
for (std::vector<char>::iterator it = buffer_.begin(); it!=buffer_.end(); ++it)
{
char c = *it;
ss << c;
ss >> s;
Logger::Log(s);
}
对于输出,我只能得到四次D
复制是好的,它是从char到string的转换,这是错误的,您可以只使用适当的构造函数
for (std::vector<char>::iterator it = buffer_.begin(); it!=buffer_.end(); ++it)
{
char c = *it;
Logger::Log(std::string(1, c));
}
或简单地
for (char c : buffer_) {
Logger::Log(std::string(1, c));
}
而且,根据记录器的不同,可能会串联形成一个唯一的字符串:
Logger::Log(std::string(buffer_.data(), buffer_.size()));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句