c# Перевод hex UTF8 числа из массива байт в int напрямую

Есть массив байт 0xBB 0xBC 0xBD 0x31 0x43 0x43 0x68 0x00 представляющий из себя текст в UTF8 > »јЅ1CCh Здесь 1СС это значение которое мне нужно извлечь (0x1CC) Возможно ли в C# это сделать напрямую не переводя байты в строку, а затем строку в значение? Другими словами быстрее чем этот способ:

Uint.TryParse(Encoding.UTF8.GetString(bytes[4..^2]),out uint value) ? value : null; // C# 9.0

Ответы (1 шт):

Автор решения: VladD

В .NET 5* есть класс Utf8Parser, который по идее делает то, что вам надо. Но вы должны указать ему позицию сами (выбирая нужный Span):

var bytes = new byte[] { 0xBB, 0xBC, 0xBD, 0x31, 0x43, 0x43, 0x68, 0x00 };
var numberBytes = bytes.AsSpan()[3..];
if (Utf8Parser.TryParse(numberBytes, out uint v, out int _, 'x'))
    Console.WriteLine($"{v:X}");

Проверка: https://dotnetfiddle.net/Rh8FhQ

Обратите внимание, что можно указать только начальный байт, парсер прочитает столько, сколько сможет.


*а также в .NET Core 2.1+

→ Ссылка