buffer_copy

此函数将存储在一个缓冲区中的一段 (或全部) 数据复制到另一个缓冲区。

当使用两个缓冲区并从一个复制到另一个时,这两个缓冲区必须先前已使用buffer_create函数创建(例如),并且可以指定数据偏移量(以字节为单位)相对于缓冲器的开始,以及另一数据偏移量,以定义在目的地缓冲器中要将数据复制到的位置。

注意 不能复制到同一缓冲区。

 

语法:

buffer_copy(src_buffer, src_offset, size, dest_buffer, dest_offset);

参数类型描述
src_bufferBuffer从中复制 的缓冲区。
src_offsetReal开始复制的数据偏移量(以字节为单位)。
sizeReal要复制的数据的大小(以字节为单位)。
dest_bufferBuffer要复制到 的缓冲区。
dest_offsetReal要将数据复制到的偏移位置(以字节为单位)。

 

返回:

N/A

 

示例 1:复制整个缓冲区的内容

buff1 = buffer_create(2048, buffer_grow, 1);
buff2 = buffer_create(2048, buffer_grow, 1);
repeat(2048)
{
    buffer_write(buff1, buffer_u8, irandom(255));
}
buffer_copy(buff1, 0, 2048, buff2, 0);

上面的代码首先创建两个缓冲区,buff1buff2,大小都是 2048 字节。然后使用 buffer_writerepeat 循环,用随机字节 (类型 buffer_u8) 填充 buff1irandom(255) 返回 0 到 255 之间的随机值,包括 0 和 255。最后,将整个 buff1 复制到 buff2。数据复制从 buff1 开始 (因为 src_offset 参数为 0)。2048 字节 (即 所有 字节) 复制到目标缓冲区 buff2。写入从开始处开始,由设置为 0 的 dest_offset 指示。复制后,buff2 包含与 buff1 完全相同的字节 (因此完全相同)。

 

示例 2:从偏移量开始从缓冲区复制

buff1 = buffer_create(2048, buffer_fixed, 1);
buff2 = buffer_create(2048, buffer_fixed, 1);
repeat(2048)
{
    buffer_write(buff1, buffer_u8, irandom(255));
}
var _offset = 273;
var _size = buffer_get_size(buff1) - _offset;
buffer_copy(buff1, _offset, _size, buff2, 0);

该示例以与示例 1 相同的方式初始化缓冲器,即它创建大小为 2048 的两个缓冲器,并用随机字节填充第一个缓冲器。然后定义一个偏移量,从该偏移量开始将字节从第一个缓冲区 buff 1 复制到第二个缓冲区 buff 2。要复制的字节数 (即 长度大小 ) 然后通过从缓冲区的总大小中减去偏移 _offset 来计算,该缓冲区的总大小是使用 buffer_get_size 检索的。最后,buff 1 中从 _offset 开始的连续字节块被复制到 buff 2。它被复制到偏移量为 0 的 buff 2 中,因此 buff 1 中索引 _offset 处的字节被复制到 buff 2 中的索引 0,buff 1 中索引 _offset+1 处的字节在 buff 2 中的索引 1 处结束,依此类推。总共 _size 字节发生此情况。