C# 从字节数组中获取最后一个字节

C# 从字节数组中获取最后一个字节,c#,reverse,C#,Reverse,我需要从字节数组中读取最后8个字节。现在我是这样做的: last8 = data.Reverse().Take(8).Reverse(); 有更好的方法吗?您也可以使用数据。跳过(data.Count-8)(如果您的数据已经被枚举-例如数组或列表)。这是怎么回事: var last8 = data.Skip(data.Length - 8); 将保存两次反转阵列的步骤。例如: byte[] data = ...; byte[] last8 = new byte[8]; Array.Copy(

我需要从字节数组中读取最后8个字节。现在我是这样做的:

last8 = data.Reverse().Take(8).Reverse();

有更好的方法吗?

您也可以使用
数据。跳过(data.Count-8)
(如果您的数据已经被枚举-例如
数组或
列表
)。

这是怎么回事:

var last8 = data.Skip(data.Length - 8);
将保存两次反转阵列的步骤。

例如:

byte[] data = ...;
byte[] last8 = new byte[8];
Array.Copy(data, data.Length-8, last8, 0, 8);
C#8有一个新功能,可能有助于

var myByteArray = new byte[] {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A };
byte[] last8 = mydata[^8..];   //      => 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A

在上面的例子中,我们从“8开始”,然后到结尾。

或者你可以使用
数组。复制
复制可能是最好的使用方式,因为根据大小,反向操作可能会非常昂贵;尤其是数据量大的情况下,你说更好是什么意思?更快?更具可读性?@MichelKeijzers,
Reverse()。当应用于任意长度的数组时,Take(m)
操作为O(m)。Skip可能需要遍历(几乎)整个数组,直到达到所需的索引。如果penartur的评论是正确的,那么Reverse().Take(8)应该只包含8项。由于8是常数,且数组大小可能很大,因此后者似乎更可取。