Преобразование HEX UTF8 во float

Существует ли более быстрый способ для перевода HEX UTF8 во float чем способ показанный ниже:

        byte[] freqArray = { 0x31, 0x31, 0x34, 0x38, 0x2E, 0x35, 0x30, 0x30, 0x30 };

        string freqs = System.Text.Encoding.UTF8.GetString(freqArray);

        float freq = float.Parse(freqs, System.Globalization.CultureInfo.InvariantCulture);

        Console.WriteLine(freq); //1148.5

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

Автор решения: Exploding Kitten

Если вы используете .NET Core 2.1+ и особо не хотите изобретать другие алгоритмы, то можно воспользоваться Utf8Parser из System.Buffers.Text:

var result = Utf8Parser.TryParse(freqArray, out float freq, out _);
if (!result)
    throw ...;

Console.WriteLine(freq);

Работает примерно в 2.2 раза быстрее (проверял на i5, Mac OS, .NET Core 3.1) и не создает лишних строк.

→ Ссылка
Автор решения: Deim

Наиболее быстрый вариант оказался следующим:

private static float HexSpanToFloat(Span<byte> span)
    {
        return (float)((span[0]&0xf)*1000+
                       (span[1]&0xf)*100+
                       (span[2]&0xf)*10+
                       (span[3]&0xf)+
                       (span[5]&0xf)*0.1+
                       (span[6]&0xf)*0.01+
                       (span[7]&0xf)*0.001+
                       (span[8]&0xf)*0.0001+
                       (span[9]&0xf)*0.00001+
                       (span[10]&0xf)*0.000001);
    }

С подсказки nick_n_a

→ Ссылка