如何从字节数组中删除特定索引中的字节

时间:2014-12-02 12:02:12

标签: c# bytearray

我有一个字节数组。我需要删除特定索引处的字节并拆分字节数组。例如,假设我有一个长度为1000的字节数组。我需要从第50位到第200位删除字节。所以我的预期结果是2字节数组。一个是0-49,另一个是201-1000。

Array.RemoveAt是用索引删除字节数组的唯一方法吗?

提前致谢!

4 个答案:

答案 0 :(得分:3)

如果速度至关重要,您可以创建两个新阵列并使用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.

这可能是您可能获得的最快速度。

答案 1 :(得分:2)

您可以使用IEnumerable TakeSkip,例如

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();

答案 2 :(得分:1)

下面的代码可以用来分割字节数组,“index”起始索引和“count”是索引计数到你要分割的索引,这里你的条件索引= 50,计数是150;

List<byte> byteArray = array.ToList(); //array is the byte array
byteArray.RemoveRange(index, count);
Byte[] array1 = byteArray.ToArray(); //array1 is the resultant byte array

答案 3 :(得分:0)

你能不能得到像这样的子阵列?

byte[] array1 = array.ToList().GetRange(0, x1-1).ToArray();
byte[] array2 = array.ToList().GetRange(x2, array.Length- x2 - 1).ToArray();

其中x1和x2在您的示例中为50和200