Восстановить 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();
}