我有一个字节数组,代表一个完整的TCP/IP数据包.为了澄清,字节数组的排序如下:
(IP标头 - 20字节)(TCP标头 - 20字节)(有效负载 - X字节)
我有一个Parse接受字节数组并返回一个TCPHeader对象的函数.它看起来像这样:
TCPHeader Parse( byte[] buffer );
Run Code Online (Sandbox Code Playgroud)
给定原始字节数组,这是我现在调用此函数的方式.
byte[] tcpbuffer = new byte[ 20 ];
System.Buffer.BlockCopy( packet, 20, tcpbuffer, 0, 20 );
TCPHeader tcp = Parse( tcpbuffer );
Run Code Online (Sandbox Code Playgroud)
有没有一种方便的方法可以将TCP字节数组(即完整TCP/IP数据包的字节20-39)传递给Parse函数,而无需先将其提取到新的字节数组?
在C++中,我可以执行以下操作:
TCPHeader tcp = Parse( &packet[ 20 ] );
Run Code Online (Sandbox Code Playgroud)
C#中有类似的东西吗?我想尽可能避免临时字节数组的创建和后续垃圾收集.
我有一个包含引用类型元素的巨大数组,我想创建许多其他数组,这些数组基本上只指向那个大数组的特定部分.
换句话说,我想创建"索引器"或"长度指针".
在C++中,使用指针很容易,并为每个指针分配一个长度,例如创建一个包含长度指针的结构.
我怎样才能在C#/ .NET中实现这一目标?
重点是避免复制任何东西,我只想指向已经存在于内存中的数组中的特定部分.
有任何想法吗?