文字列をデコードしたい_(ReadOnly)Span<byte>
_があります。
.NET Core 2.1でのみ、バイトをコピーせずに文字列をデコードするための新しいオーバーロードがあります。
_Encoding.GetString(ReadOnlySpan<byte> bytes);
_
.NET Standard2.0および.NET4.6(これもサポートしたい)では、古典的なオーバーロードしかありません。
_Encoding.GetString(byte[] bytes);
Encoding.GetString(byte* bytes, int byteCount);
_
最初のものは、私が避けたい配列へのバイトのコピーを必要とします。
2番目にはバイトポインタが必要なので、スパンから1つ取得することを考えました。
_Encoding.GetString(Unsafe.GetPointer<byte>(span.Slice(100)))
_
...しかし、私はそのための実際の方法を見つけることができませんでした。 void* Unsafe.AsPointer<T>(ref T value)
を試しましたが、スパンを渡すことができず、ポインター(およびスパン)を処理する別のメソッドが見つかりませんでした。
これはまったく可能ですか?もしそうなら、どのように?
これを試して:
Span<byte> bytes = ...;
string s = Encoding.UTF8.GetString((byte*)Unsafe.AsPointer(ref bytes.GetPinnableReference()),
bytes.Length);