使用std::copy复制缓冲区

Copying buffer with std::copy

本文关键字:缓冲区 复制 copy 使用 std      更新时间:2023-10-16

我正在编写视频编码器,出于某种原因,我想使用矢量复制缓冲区std::copy只复制第一个字符。我的目标是复制缓冲区并使用fwrite将它们写入文件。

我使用的是谷歌本地客户端,它不允许我从主线程直接拥有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四次

复制是好的,它是从字符到字符串的转换是错误的,你可以使用适当的构造函数

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()));