public override bool TryDecode(ReadOnlySpan <byte> encodedBytes, out string text, out int bytesConsumed) { int len; if (!Utf8Encoder.TryComputeStringLength(encodedBytes, out len)) { text = string.Empty; bytesConsumed = 0; return(false); } text = new string(' ', len); unsafe { fixed(char *p = text) { var charSpan = new Span <char>(p, len); int written; return(Utf8Encoder.TryDecode(encodedBytes, charSpan, out bytesConsumed, out written)); } } }
public override bool TryEncode(ReadOnlySpan <byte> utf8, Span <byte> encodedBytes, out int bytesConsumed, out int bytesWritten) { int charactersWritten; var utf16 = encodedBytes.NonPortableCast <byte, char>(); var result = Utf8Encoder.TryDecode(utf8, utf16, out bytesConsumed, out charactersWritten); bytesWritten = charactersWritten * sizeof(char); return(result); }
public override bool TryDecode(ReadOnlySpan <byte> encodedBytes, Span <uint> utf32, out int bytesConsumed, out int charactersWritten) { return(Utf8Encoder.TryDecode(encodedBytes, utf32, out bytesConsumed, out charactersWritten)); }