Split C语言中循环缓冲区的分割数据

Split C语言中循环缓冲区的分割数据,split,circular-buffer,Split,Circular Buffer,我正在用C语言编写循环缓冲区的代码,但在写操作结束时,我一直在将输入写入缓冲区 我从用户那里获取一块数据作为输入,其中包括数字、字符串、空字符、任何内容,并将其写入缓冲区。当写指针到达指针的末尾时,它将换行到顶部并从那里开始写入数据。为此,我希望分割块数据,以便将一半数据写入写指针的底部,其余数据将从顶部写入 我无法分割这些数据。有什么方法可以做到这一点吗 编辑:我用来写数据的代码 if (length > circular_buffer_available_space_bottom(cb

我正在用C语言编写循环缓冲区的代码,但在写操作结束时,我一直在将输入写入缓冲区

我从用户那里获取一块数据作为输入,其中包括数字、字符串、空字符、任何内容,并将其写入缓冲区。当写指针到达指针的末尾时,它将换行到顶部并从那里开始写入数据。为此,我希望分割块数据,以便将一半数据写入写指针的底部,其余数据将从顶部写入

我无法分割这些数据。有什么方法可以做到这一点吗

编辑:我用来写数据的代码

if (length > circular_buffer_available_space_bottom(cb)) {

/* copy data in the buffer till the end */
memcpy(circular_buffer_ends_at(cb), data, space_bottom);
/* Move the rear pointer to the next write location */
cb->rear = (cb->rear + space_bottom) % cb->length;

/* Calculate space available at top of the buffer */
space_top = length - space_bottom;

/* copy remaining data in available space at the top  */
memcpy(circular_buffer_ends_at(cb), data,space_top);

/* Move the rear pointer to the next write location */
cb->rear = (cb->rear + space_top) % cb->length;
}
这里,首先检查输入数据的长度。 因此,当数据写入底部时,应该将其拆分,剩余的数据需要写入第二个memcpy()中的顶部

现在,我还没有拆分这些数据,我正在寻找拆分数据的方法。
此代码将给我错误,因为可用空间将小于所需空间。

具有固定大小的循环缓冲区将变成
队列


用C语言的代码示例提供了很好的解释。

您使用的是什么语言?块是如何实现的?如果没有这些信息,就不可能回答这个问题假设用户在25字节大小的缓冲区中写入15字节的块。然后他读取5个字节。因此,要写入的总可用空间=10(写入指针底部)+5(写入指针顶部)=15。因此,如果用户再写入15个字节,则需要在底部写入10个字节,然后指针换行到顶部,剩余的数据写入顶部。希望这有帮助。那么分割数据有什么问题呢?但是给出的代码和解释是针对单元素输入的。在这里,我将字符串、数字、空字符作为输入,因此它是一种数据块。然后首先将要写入缓冲区的所有内容转换为字节数组。您还需要一种在从缓冲区读取数据后将其转换回原始数据类型的方法。由于您似乎希望在同一缓冲区中存储不同的数据类型,因此可能需要首先查看数据的序列化/反序列化。