我有字节数组。我需要删除前4个字节,如:
byte[] newArray = new byte[byteArray.Length - 4];
Buffer.BlockCopy(byteArray, 4, newArray, 0, byteArray.Length - 4);
但我可以用C / C ++风格移动指针吗? :
byte[] byteMsg = byteArray + 4;
我不想在绝对需要之前分配额外的内存,因为这段代码经常被执行。
upd:我从Socket接收数据,所以我可能应该使用另一个版本的Receive count = s.Receive(byteArray);
答案 0 :(得分:4)
不,你不能这样做。 .NET数组总是固定大小,你不能在不安全的代码之外对其进行指针运算。
尝试使用ArraySegment
代替
答案 1 :(得分:0)
我不担心,如果没有被引用,GC会负责清理你不再使用的内存。
C#中的数组是不可变的。你不能修改它们,所以如果你需要删除前4个字节,那么你将不得不重新分配。正如thecoop建议的那样,我会看看ArraySegment
并使用它传递给其他函数,如果前4个字节对你来说并不重要。
同样值得注意的是,在C ++中,我们使用了一些指针算法,但绝对保持原始指针,减少我们最终取消分配并丢失4个字节给恶魔:)
答案 2 :(得分:0)
保持Byte数组不变,并使用MemoryStream及其偏移功能。这不会改变你的数组,你可以跳过前n个字节。
var memoryStream = new MemoryStream(byteArray);
// do whatever you want with the memory stream