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

时间:2019-06-03 00:02:43

标签: c# byte networkstream

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

基本代码示例,

example
  .doSomethingElse()
  .then(something => {
    example.createSomething(something)
  });

如果我愿意

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

byte[] store;

它将返回从流中读取的字节数

Console.WriteLine(bytes);

这是我需要传递到'store'数组的唯一字节。.但是,如果我指定

24

那么它将占用1024个字节,其中1000个为空。

所以我真正想要的是类似的东西

byte[] store = data;

这将提供数据数组中的24个字节的存储空间。

2 个答案:

答案 0 :(得分:0)

您是否正在寻找类似的东西?

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;
}

答案 1 :(得分:0)

您可以使用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>而不将其转换为数组。