C# 从字节数组中获取最后一个字节
我需要从字节数组中读取最后8个字节。现在我是这样做的: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(
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是常数,且数组大小可能很大,因此后者似乎更可取。