如何修剪字节数组的几个字节?

7

我有一个很长的字节数组。我需要消除前16个字节。是否有一种快捷的方法可以做到这一点?


2
最有效的解决方案是保持数组不变,只需在其中索引16个额外字节,如果您关心这一点。 - Jon
@Jon:我需要将新的缩短数组传递给另一个函数进行进一步处理。 - NewBie
1
@NewBie 好的,那就将该函数适应接受不同于数组的参数。实际上,在公共接口中使用数组是不被鼓励的(是的,.NET框架也这样做了;这是一个错误)。 - Konrad Rudolph
@Konrad Rudolph:为什么?有什么问题吗? - NewBie
@NewBie 嗯,首先,如果你的方法接受 IList<byte> 而不是数组,你甚至不会有这个问题:你可以创建一个包装类,透明地将数组的索引映射到 16 个位置之后,就像 Jon 建议的那样,在目标函数内部不做任何更改。 - Konrad Rudolph
2个回答

12

这不是最有效率的方法,但可以解决问题:

// using System.Linq;

long[] array = ...;

long[] newArray = array.Skip(16).ToArray();

我已经尝试过了,但是VS说skip不是数组的成员。为什么? - NewBie
@NewBie,因为你在文件顶部没有使用System.Linq。Skip是一个扩展方法,而不是数组的成员。实际的错误信息应该说类似于“...不是某个成员,并且找不到以sometype作为第一个参数的扩展方法”。 - Rune FS
哇,LINQ真是太方便了!谢谢。 - NewBie

8

查看 Array.Copy
例如:

var array = //initialization
int bytesToEliminate = 16;
int newLength = array.Length - bytesToEliminate; //you may need to check if this positive
var newArray = new byte[newLength]; 
Array.Copy(array, bytesToEliminate, newArray, 0, newLength);

我检查了一下,但未能消除前16个字节。请帮忙。 - NewBie
Array.Copy不会改变原始数组,但它会创建一个副本。如果使用正确,该副本将已经去掉了前16个字节。 - Arjan Einbu
@NewBie - 我更新了答案并提供了一个简短的示例。无论如何,你应该阅读MSDN文章以了解如何使用它。 - default locale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接