我需要从字节数组中读取最后 8 个字节。现在我这样做:
last8 = data.Reverse().Take(8).Reverse();
有更好的方法吗?
使用 Array.Copy 例如:
byte[] data = ...;
byte[] last8 = new byte[8];
Array.Copy(data, data.Length-8, last8, 0, 8);
这个怎么样:
var last8 = data.Skip(data.Length - 8);
可以节省两次反转数组的步骤。
C# 8 有 Ranges 可能会有所帮助...
var bytes = new byte[] { 1, 2, 3, 4, 5 };
byte[] last3 = bytes [^3..];
// last3 contains { 3, 4, 5 }
示例...
START END EXAMPLE ALSO KNOWN AS
[^3..] - 3rd back - end { 3, 4, 5 } last 3
[3..] - 3rd - end { 4, 5 } skip 3
[3..^2] - 3rd - 3rd back { }
[..^3] - beginning - 4rd back { 1, 2 } skip last 3
[..3] - beginning - 4rd { 1, 2, 3 } first 3
[..] - beginning - end { 1, 2, 3, 4, 5 } all
您还可以使用
data.Skip(data.Count - 8)
(如果您的数据已枚举 - 例如 Array
或 List
)。