public static string DecodeUtf8(byte* bytes, int byteCount, byte[] prefix, MetadataStringDecoder utf8Decoder) { Debug.Assert(utf8Decoder != null); if (prefix != null) { return DecodeUtf8Prefixed(bytes, byteCount, prefix, utf8Decoder); } if (byteCount == 0) { return String.Empty; } return utf8Decoder.GetString(bytes, byteCount); }
private static string DecodeUtf8Prefixed(byte* bytes, int byteCount, byte[] prefix, MetadataStringDecoder utf8Decoder) { Debug.Assert(utf8Decoder != null); int prefixedByteCount = byteCount + prefix.Length; if (prefixedByteCount == 0) { return String.Empty; } byte[] buffer = AcquireBuffer(prefixedByteCount); prefix.CopyTo(buffer, 0); Marshal.Copy((IntPtr)bytes, buffer, prefix.Length, byteCount); string result; fixed (byte* prefixedBytes = buffer) { result = utf8Decoder.GetString(prefixedBytes, prefixedByteCount); } ReleaseBuffer(buffer); return result; }