簡體   English   中英

將字節從一個數組復制到另一個數組

[英]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);

它將返回從流中讀取的字節數

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

在線試用它們

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

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

或者,如果需要,您可以只傳遞Span<T>而不將其轉換為數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM