c++ - 在 C++ 中将字节序列重复到更大缓冲区的最简单方法

标签 c++ stl boost

给定(在 C++ 中)

char * byte_sequence;
size_t byte_sequence_length;
char * buffer;
size_t N;

假设 byte_sequencebyte_sequence_length 被初始化为一些任意长度的字节序列(及其长度),并且 buffer 被初始化为指向N * byte_sequence_length 字节,将byte_sequence 复制到buffer N 次最简单的方法是什么? STL/BOOST 中是否已经有类似的功能?

例如,如果序列是“abcd”,N 是 3,那么 buffer 最终将包含“abcdabcdabcd”。

最佳答案

我可能会这样做:

for (int i=0; i < N; ++i)
    memcpy(buffer + i * byte_sequence_length, byte_sequence, byte_sequence_length);

这假设您正在处理二进制数据并跟踪长度,而不是使用 '\0' 终止符。

如果您希望这些是 C 字符串,您必须分配一个额外的字节并在结尾处添加 '\0'。给定一个 C 字符串和一个整数,你想这样做:

char *RepeatN(char *source, size_t n)
{
    assert(n >= 0 && source != NULL);            
    size_t length = strlen(source) - 1;
    char *buffer = new char[length*n + 1];
    for (int i=0; i < n; ++i)
        memcpy(buffer + i * length, source, length);
    buffer[n * length] = '\0';
}

关于c++ - 在 C++ 中将字节序列重复到更大缓冲区的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640518/

相关文章:

c++ - Sox - Windows 中的管道输出

c++ - 用QT发送POST请求并读取Json Response

C++ STL vector 迭代器...但出现运行时错误

c++ - 具有boost spirit 的抽象语法树的迭代更新

c++ - boost::enable_if MSVC

c++ - 分配给 c 代码的内存比它应该使用的要少得多

c++ - 如何删除函数返回的数组

使用自定义 "bind3rd"函数时,C++模板编译错误

c++ - 无法为 std::less/std::greater 实例化 binary_function

c++ - 性能 : boost. 计算对比opencl C++ 包装器