Восстановить string из UTF8 byte[4] с минимальными затратами - C#
Формулировка задачи:
Нужна функция, которая возвращает по переданным 4 байтам строку в кодировке utf8 из заранее определенного набора строк констант, либо, если эта строка не из набора - null).
Уважаемое сообщество, прошу подсказать наиболее оптимальный вариант решения задачи с точки зрения потребляемых системных ресурсов (длина кода второстепенна).
Какие еще есть хорошие варианты? (еще раз подчеркиваю - нужно максимально сэкономить ресурсы,а длина кода второстепенна).
Да и вот еще хотел спросить заодно - как в моём случае можно грамотно померить сколько памяти заняла \ за какое время отработала функция. По времени еще более менее понятно - снять время в начале выполнения функции с помощью DateTime.Now и в конце вывести разницу в микросекундах между снятым вначале и свежеснятым DateTime.Now, а с памятью как быть?
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; }
Решение задачи: «Восстановить 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д