gpt4 book ai didi

c# - 我可以获得指向 Span 的指针吗?

转载 作者:太空狗 更新时间:2023-10-29 22:21:16 27 4
gpt4 key购买 nike

我有一个 (ReadOnly)Span<byte>我想从中解码一个字符串。

只有在 .NET Core 2.1 中,我才有新的重载来从中解码字符串而无需复制字节:

Encoding.GetString(ReadOnlySpan<byte> bytes);

在 .NET Standard 2.0 和 .NET 4.6(我也想支持)中,我只有经典重载:

Encoding.GetString(byte[] bytes);
Encoding.GetString(byte* bytes, int byteCount);

第一个需要将字节复制到我想避免的数组中。
第二个需要一个字节指针,所以我考虑从我的跨度中获取一个,比如

Encoding.GetString(Unsafe.GetPointer<byte>(span.Slice(100)))

...但我没能找到真正的方法。我试过 void* Unsafe.AsPointer<T>(ref T value) ,但我无法将跨度传递给它,也没有找到另一种处理指针(和跨度)的方法。

这是否可能,如果可能,如何实现?

最佳答案

如果您有 C# 7.3 或更高版本,则可以使用对 fixed 语句的扩展,该语句可以在类型上使用任何适当的 GetPinnableReference 方法( SpanReadOnlySpan 都有):

fixed (byte* bp = bytes) {
...
}

当我们处理指针时,这当然需要一个不安全上下文。

C# 7.0 到 7.2 没有这个,但允许以下内容:

fixed (byte* bp = &bytes.GetPinnableReference()) {
...
}

关于c# - 我可以获得指向 Span 的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54255888/

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