gpt4 book ai didi

c# - 在 C# 中使用字节数组

转载 作者:可可西里 更新时间:2023-11-01 07:59:41 25 4
gpt4 key购买 nike

我有一个表示完整 TCP/IP 数据包的字节数组。为清楚起见,字节数组的顺序如下:

(IP header - 20 字节)(TCP header - 20 字节)(有效负载 - X 字节)

我有一个 Parse 函数,它接受一个字节数组并返回一个 TCPHeader 对象。它看起来像这样:

TCPHeader Parse( byte[] buffer );

给定原始字节数组,这是我现在调用此函数的方式。

byte[] tcpbuffer = new byte[ 20 ];
System.Buffer.BlockCopy( packet, 20, tcpbuffer, 0, 20 );
TCPHeader tcp = Parse( tcpbuffer );

有没有一种方便的方法可以将 TCP 字节数组(即完整 TCP/IP 数据包的字节 20-39)传递给 Parse 函数,而无需先将其提取到新的字节数组?

在 C++ 中,我可以执行以下操作:

TCPHeader tcp = Parse( &packet[ 20 ] );

C# 中有类似的东西吗?如果可能,我想避免临时字节数组的创建和后续垃圾回收。

最佳答案

您可以在 .NET 框架中看到的一种常见做法是指定偏移量和长度,我建议在此处使用。因此,让您的 Parse 函数也接受传递数组中的偏移量,以及要使用的元素数。

当然,与在 C++ 中传递指针一样,同样的规则适用 - 不应修改数组,否则如果您不确定何时使用数据,可能会导致未定义的行为。但如果您不再打算修改数组,这就没有问题。

关于c# - 在 C# 中使用字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/409256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com