![](/img/trans.png)
[英]Copy Bytes from a byte array to a specific position of another Byte array in C#
[英]Insert a byte array into another byte array at a specific position with c#
这可能是一个愚蠢的问题,但尚未找到简单的答案...
我正在尝试在特定位置的另一个字节数组中插入一个简单的c#字节数组。 例如,现有字节不应被覆盖,而应移回更远的位置。 就像您将页面复制到现有文本块内的某些文本块一样。
但是我认为这是普遍现象,应该更容易吗? 还是我错了?
但我认为这是普遍现象
如果您经常要在另一块大数据的中间插入一大块数据,那么您可能会考虑使用设计用于执行此操作的数据结构。 数组被设计为大小固定且内容可变 。 如果您的要求包括“大小可变”,那么数组对您来说是错误的数据类型。 而是考虑使用双向链表或可链接的双端队列。
并且应该更容易?
您已经确定了可以执行所需操作的简单四步算法。 没有比这容易的多了。
使用List<byte>
而不是byte[]
; 它将为您提供所需的灵活性...
List<byte> b1 = new List<byte>() { 45, 46, 47, 50, 51, 52 };
List<byte> b2 = new List<byte> { 48, 49 };
b1.InsertRange(3, b2);
然后,无论出于何种原因都需要返回byte[]
,可以调用...
b1.ToArray();
看一下Array.CopyTo
。
从指定的目标数组索引处开始,将当前一维数组的所有元素复制到指定的一维数组。
如果性能不重要,请考虑:
var combined = first.Take(insertPosition)
.Concat(second)
.Concat(first.Skip(insertPosition))
.ToArray();
我想这几乎是您建议的四步算法,除了第一步“最后”。 但是,请注意,由于多种原因,这效率很低,包括不必要的动态缓冲区和第一个数组的冗余部分枚举。
否则,您的建议就可以了。
如果可以将对象换成更大的东西,则可以看一下类似List的东西,该列表具有可以满足您需要的InsertRange方法(http://msdn.microsoft.com/zh-cn/library/884ee1fz.aspx )。 当然,使用其他对象可能不是一个选择,但是它建议您采用一种简单的方法来做事情。 另外,其他对象可能更有用。 货比三家... :)
根据定义, 数组的 大小是固定的 。 您不能插入或删除元素,而只能覆盖元素。
您应该改为一个列表 。 列表提供了用于插入或删除元素和子范围的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.