如果我有两个阵列
unsigned char buffer[80];
unsigned char data[3]
// data array will always hold hex values
data[] = {0x00, 0xEB, 0xFF}
如果我想继续更新缓冲区数组,方法是将data []的元素(总是十六进制值)附加到它的末尾,那么最好的方法是什么,因为我知道最大的大小缓冲阵列可以吗?另外,如果我不知道缓冲区阵列的最大大小是什么并且需要在我添加它时更新它需要改变什么?
谢谢!
答案 0 :(得分:1)
只需跟踪buffer
数组中已有的字节数。它从零开始,对于你附加的每个字节,你将此计数器增加1。这意味着你不仅知道数组中的字节数,计数器也是下一个要添加的位置。
因此,如果计数器为零,则设置buffer[0]
并将计数器增加为1。然后附加你设置buffer[1]
的下一个字节,并将计数器增加到两个,等等。
要继续将data
数组附加到循环中,请使用memcpy
并按data
中的项目数增加计数器:
size_t count = 0; /* Counter starts out at zero */
/* Append the `data` array five times */
for (size_t i = 0; i < 5; ++i)
{
/* Use of `sizeof` here assumes that `data` is a proper array and not a pointer */
memcpy(&buffer[count], data, sizeof(data));
/* Increase counter */
count += sizeof(data);
}
注意:代码假定buffer
和data
都是char
(或其他8位类型)的数组。
另外请注意不要超出buffer
的界限。