将字节从一个数组复制到另一个数组

Copy bytes from one array to another

我正在尝试将特定数量的字节从一个字节数组复制到另一个字节数组,我搜索了类似问题的大量答案,但似乎找不到解决方案。

代码的基本示例,

byte[] data = new byte[1024];
int bytes = stream.Read(data, 0, data.Length);

byte[] store;

如果我这样做

Console.WriteLine(bytes);

它将 return 从流中读取的字节数

24

这是我需要传递给“store”数组的唯一字节。当然,如果我指定

byte[] store = data;

那么需要1024个字节,其中1000个字节是空的。

所以我真正想要的是

byte[] store = (data, 0, bytes);

这将从数据数组中存储 24 个字节。

您在找这样的东西吗?

byte[] Slice(byte[] source, int start, int len)
{
    byte[] res = new byte[len];

    for (int i = 0; i < len; i++)
    {
        res[i] = source[i + start];
    }

    return res;
}

您可以使用 Array.Copy:

byte[] newArray = new byte[length];
Array.Copy(oldArray, startIndex, newArray, 0, length);

Buffer.BlockCopy:

byte[] newArray = new byte[length];
Buffer.BlockCopy(oldArray, startIndex, newArray, 0, length);

或 LINQ:

var newArray = oldArray
.Skip(startIndex) // skip the first n elements
.Take(length) // take n elements
.ToArray(); // produce array

Try them online

或者,如果您使用的是 C# 7.2 或更高版本(如果您使用的是 .NET Framework,则引用了 System.Memory NuGet 包),您可以使用 Span<T>:

var newArray = new Span<byte>(oldArray, startIndex, length).ToArray();

或者,如果需要,您可以直接传递 Span<T> 而无需将其转换为数组。