MSDN.WhiteKnight - Stack Overflow answers
Ответ на "c# конверт Memory<char> в Memory<byte>"
Answer 987281
Например так (требует разрешения unsafe-кода):
using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Buffers; namespace CilBytecodeParserTest { class Program { unsafe class StringMemoryManager<T> : MemoryManager<T> { MemoryHandle h; int len; public StringMemoryManager(string s) { h = s.AsMemory().Pin(); len = s.Length * 2; } public override Span<T> GetSpan() { return new Span<T>(h.Pointer, len/Marshal.SizeOf(typeof(T))); } public override MemoryHandle Pin(int elementIndex = 0) { return h; //useless } public override void Unpin() { //useless } protected override void Dispose(bool disposing) { if(disposing) h.Dispose(); } } static void Main(string[] args) { string text = "Hello"; var mngr = new StringMemoryManager<byte>(text); Memory<byte> mem = mngr.Memory; } } }
MemoryHandle позволяет получить указатель для любого Memory. MemoryManager создает Memory на основе любого Span, а Span можно создать из указателя. Получается универсальный конвертор всего во все. Недостаток в том, что строка будет закреплена в памяти на все время работы с нею. Если же вы спрашиваете, как сделать это нормально (без низкоуровневых хаков), то, видимо, никак. Не нашел такого API.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.