本文整理汇总了C#中ReadOnlySpan.Read方法的典型用法代码示例。如果您正苦于以下问题:C# ReadOnlySpan.Read方法的具体用法?C# ReadOnlySpan.Read怎么用?C# ReadOnlySpan.Read使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ReadOnlySpan
的用法示例。
在下文中一共展示了ReadOnlySpan.Read方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TryDecodeCodePoint
public static bool TryDecodeCodePoint(ReadOnlySpan<byte> buffer, out UnicodeCodePoint codePoint, out int encodedBytes)
{
if (buffer.Length < 2)
{
codePoint = default(UnicodeCodePoint);
encodedBytes = default(int);
// buffer too small
return false;
}
uint codePointValue = buffer.Read<ushort>();
encodedBytes = 2;
if (UnicodeCodePoint.IsSurrogate((UnicodeCodePoint)codePointValue))
{
// TODO: Check if compiler optimized it so codePointValue low range is checked only once
if (!UnicodeCodePoint.IsHighSurrogate((UnicodeCodePoint)codePointValue) || buffer.Length < 4)
{
codePoint = default(UnicodeCodePoint);
encodedBytes = default(int);
// invalid high surrogate or buffer too small
return false;
}
unchecked
{
codePointValue -= UnicodeConstants.Utf16HighSurrogateFirstCodePoint;
encodedBytes += 2;
}
// high surrogate contains 10 first bits of the code point
codePointValue <<= 10;
uint lowSurrogate = buffer.Read<uint>() >> 16;
if (!UnicodeCodePoint.IsLowSurrogate((UnicodeCodePoint)lowSurrogate))
{
codePoint = default(UnicodeCodePoint);
encodedBytes = default(int);
// invalid low surrogate character
return false;
}
unchecked
{
lowSurrogate -= UnicodeConstants.Utf16LowSurrogateFirstCodePoint;
}
codePointValue |= lowSurrogate;
}
codePoint = (UnicodeCodePoint)codePointValue;
return true;
}