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+