我有一个字节数组。我需要删除特定索引处的字节,并拆分字节数组。例如,假设我有一个长度为1000的字节数组。我需要删除从50到200 .So位置的字节,我的预期结果是2字节数组。一个是0-49,另一个是201-1000。
Array.RemoveAt是删除带索引的字节数组的唯一方法吗?
提前感谢!
发布于 2014-12-02 20:35:42
如果速度很重要,您可以创建两个新数组,并使用Array.Copy()将所需的字节复制到其中。
为了更容易使用,为数组编写一个小的扩展方法可能更方便,它提取并返回一个子集,如下所示(注意:为简洁起见,省略了错误处理):
public static class ArrayExt
{
public static T[] Subset<T>(this T[] array, int start, int count)
{
T[] result = new T[count];
Array.Copy(array, start, result, 0, count);
return result;
}
}然后您可以这样使用它(我已经更正了您示例中的索引;您的索引从201开始,但它应该是200):
var array1 = new byte[1000];
// ... populate array1 somehow, then extract subsets like so:
var array2 = array1.Subset( 0, 50);
var array3 = array1.Subset(200, 800);
// Now array2 and array3 are two byte arrays
// containing the required bytes.这可能是您可能获得的最快速度。
发布于 2014-12-02 20:09:57
例如,您可以使用IEnumerable Take和Skip
byte[] origin = new byte[200];
for(int i = 0; i < origin.Length; i++)
origin[i] = (byte)i;
byte[] first = origin.Take(50).ToArray();
byte[] second = origin.Skip(100).Take(50).ToArray();发布于 2014-12-02 20:24:47
下面的代码可以用来拆分字节数组," index“开始索引," count”是索引计数,你想拆分到哪个索引,这里的条件是index=50,count是150;
List<byte> byteArray = array.ToList(); //array is the byte array
byteArray.RemoveRange(index, count);
Byte[] array1 = byteArray.ToArray(); //array1 is the resultant byte arrayhttps://stackoverflow.com/questions/27248973
复制相似问题