Восстановить string из UTF8 byte[4] с минимальными затратами - C#

Узнай цену своей работы

Формулировка задачи:

Нужна функция, которая возвращает по переданным 4 байтам строку в кодировке utf8 из заранее определенного набора строк констант, либо, если эта строка не из набора - null). Уважаемое сообщество, прошу подсказать наиболее оптимальный вариант решения задачи с точки зрения потребляемых системных ресурсов (длина кода второстепенна).

Encoding.UTF8.GetString()

сразу отмел - хоть и компактное решение, но функция "тяжелая". Пока остановился на подходе перебора каждого байта вложенными свичами\ифами (тоже наверное не самый лучший подход, т.к. ветвления и кода много - но это первое что пришло на ум):
// допустим, набор такой: ABCD, ADEC, BHAQ, TESW (это для примера).
// в реальных условиях это возможно будет что-то около ~ 20 строк,
// где какие-то похожи друг на друга, а какие-то - совершенно разные.
// Набор совершенно точно будет определён 1 раз и в дальнейшем не будет изменяться\дополняться.
        public static string GetdStringFromBytes(byte[] bytes)
        {
            string result = null;
            switch (bytes[0])
            {
                case 0x41: // A = 0x41
                    switch (bytes[1])
                    {
                        case 0x42: // B = 0x42
                            if (bytes[2] == 0x43 && bytes[3] == 0x44) // C = 0x43, D = 0x44
                                result = "ABCD";
                            break;
                        case 0x44: // D = 0x44
                            if (bytes[2] == 0x45 && bytes[3] == 0x43) // E = 0x45, C = 0x43
                                result = "ADEC";
                            break;
                        default:
                            break;
                    }
                    break;
                case 0x42: // B = 0x42
                    if (bytes[1] == 0x48 && bytes[2] == 0x41 && bytes[3] == 0x51) // H = 0x48, A = 0x41, Q = 0x51
                        result = "BHAQ";
                    break;
                case 0x54: // T = 0x54
                    if (bytes[1] == 0x45 && bytes[2] == 0x53 && bytes[3] == 0x57) // E = 0x45, S = 0x53, W = 0x57
                        result = "TESW";
                    break;
                default:
                    break;
            }
            return result;
        }
Какие еще есть хорошие варианты? (еще раз подчеркиваю - нужно максимально сэкономить ресурсы,а длина кода второстепенна). Да и вот еще хотел спросить заодно - как в моём случае можно грамотно померить сколько памяти заняла \ за какое время отработала функция. По времени еще более менее понятно - снять время в начале выполнения функции с помощью DateTime.Now и в конце вывести разницу в микросекундах между снятым вначале и свежеснятым DateTime.Now, а с памятью как быть?

Решение задачи: «Восстановить string из UTF8 byte[4] с минимальными затратами»

textual
Листинг программы
char[] table = new char[]
{
    null,//0x0h
    //... тут должны оказаться элементы, соответствующие 0x1h вплоть до 0x41h
    'A',//0x41h и так далее вперед и с песней
    'B',//0x42h
    'C'//0x43h
};
 
public static string GetStringFrom4Bytes(byte[] bytes)
{
    StringBuilder sb = new StringBuilder();
    
    for (int i = 0; i < bytes.Length; i++)
    {
        sb.Add(table[bytes[i]]);//не уверен на счет sb.Add но подобная функция обязана быть
    }
    return sb.ToString();
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5