c# - 如何从数组段中获取字节数组

标签 c#

如果有人给我发 ArraySegment<byte> foo并且这个段指向一个更大的缓冲区,将这个段复制到一个全新的 byte[] 的惯用方法是什么? ?
我尝试访问 foo.Array但这似乎指向较大缓冲区的开头,而不是段的开头。
例如较大的缓冲区可能是“blahfoobar”,而 ArraySegment 指向“foo”。我想要一个 byte[]只用“foo”。
我确定它非常简单,但是来自 C++,我无法理解 C# 中使用的行话。

最佳答案

创建一个新数组将完全错过 API 的重点,即表示预先存在的段。在最近的 .NET 版本中,Span<T>ReadOnlySpan<T>将是更好的选择 - 它们允许您在连续内存上创建抽象,而无需消费者担心 Offset等等,因为这可以从外部强加。 Span<T>上有构造函数和 ReadOnlySpan<T>这允许您处理方面,以便消费者永远不需要了解它们,并且知道在最近的运行时:JIT 将省略对跨度的​​边界检查。

关于c# - 如何从数组段中获取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65207456/

相关文章:

c# - Controller 中的 MVC5 不明确操作方法

c# - 用于用户运行时报告设计的 OpenSource Report Designer?

c# - 将 MySQL double 导入到 C# 时出现 InvalidCastException

c# - 根据对 Azure 应用程序网关的传入请求触发 Azure Function

c# - 如何使用 C# 将自定义 XML 添加到打开的 Excel 2007 工作簿?

javascript - Json.Parse 转义换行符

c# - 编辑 ListBox 容器样式

c# - 如何从代码中获取 customErrors 的 defaultRedirect 值?

c# - 创建 C# WebClient 类后如何关闭浏览器?

c# - MVC - 为 'Html.ValidationMessage' 或 'Html.TextBox' 更改或添加类