在C#中,我如何截断byte []数组

时间:2011-11-21 15:21:08

标签: c#

我有一个大小的byte []数组,我想把它截断成一个更小的数组?

我只是想结束这个结局。

6 个答案:

答案 0 :(得分:37)

数组在C#(.NET)中是固定大小的。

您必须将内容复制到新内容。

byte[] sourceArray = ...
byte[] truncArray = new byte[10];

Array.Copy(sourceArray , truncArray , truncArray.Length);

答案 1 :(得分:23)

您可以使用Array.Resize,但所有这一切确实是制作原始数组的截断副本,然后用新的数组替换原始数组。

答案 2 :(得分:8)

    private static void Truncate() {

        byte[] longArray = new byte[] {1,2,3,4,5,6,7,8,9,10};

        Array.Resize(ref longArray, 5);//longArray = {1,2,3,4,5}

        //if you like linq
        byte[] shortArray = longArray.Take(5).ToArray();

    }

答案 3 :(得分:6)

我通常会创建一个扩展方法:

 public static byte[] SubByteArray(this byte[] byteArray, int len)
    {
        byte[] tmp = new byte[len];
        Array.Copy(byteArray, tmp, len);

        return tmp;
    }

可以像这样轻松调用字节数组:

buffer.SubByteArray(len)

答案 4 :(得分:5)

顺便说一句,Array.Resize方法需要更多的时间才能完成。在我的简单情况下,我只需要调整字节数组(约8000个项目到~20个项目):

  1. Array.Resize // 1728 ticks
  2. Array.Copy // 8 ticks

答案 5 :(得分:3)

您不能在C#中截断数组。它们的长度是固定的。

如果您想要一个可以截断并像数组一样运行的数据结构,则应使用List<T>。您可以使用List<T>.RemoveRange方法来实现此目的。