Как поставить условие на количество букв/знаков? - C#
Формулировка задачи:
Сделан элемент управления, который считывает/записывает значения байтов с смещений в файле и преобразует их в буквы/знаки в текстовом поле в программе.
Код элемента управления (текстовое поле):
Как вместо этой строки?
Как вместо этой строки поставить условие если написано разное количество букв, то использовать одну из строк, при разном количестве букв?:
using System;
using System.Collections.Generic;
using System.Text;
namespace Quicksilver
{
static class HeroMenuNameDecode
{
public static string Decode(byte[] bytess)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytess.Length; i++)
{
if (bytess[i] == 0xFF) // конец
continue;
if (dic.ContainsKey(bytess[i]))
sb.Append(dic[bytess[i]]);
else
sb.Append("?");
}
return sb.ToString();
}
public static byte[] Encode(string text)
{
byte[] b = new byte[12] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, };
char[] ch = text.ToCharArray();
for (int i = 0; i < ch.Length; i++)
{
foreach (var item in dic)
{
if (item.Value == ch[i].ToString())
{
b[i] = item.Key;
break;
}
}
}
return b;
}
static Dictionary<byte, string> dic = new Dictionary<byte, string>
{
{0x00, " "},
{0x01, "!"},
{0x20, "@"},
{0x21, "A"},
{0x22, "B"},
{0x23, "C"} // и т.д.
};
}
}byte[] b = new byte[12] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, };byte[] b = new byte[12] {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //если ноль букв написано в текстовом поле, то использовать эту строку
byte[] b = new byte[12] {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //если одна буква написана в текстовом поле, то использовать эту строку
byte[] b = new byte[12] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //если пять букв, то использовать эту строку
byte[] b = new byte[12] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, }; //если десять букв, то использовать эту строкуРешение задачи: «Как поставить условие на количество букв/знаков?»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Text;
namespace Quicksilver
{
static class HeroMenuNameDecode
{
public static string Decode(byte[] bytes)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
if (bytes[i] == 0xFF) // конец
break;
char val;
if (dic.TryGetValue(bytes[i], out val))
sb.Append(val);
else
sb.Append("?");
}
return sb.ToString();
}
public static byte[] Encode(string text)
{
// строка не может быть длиннее 11 из-за размера массива ниже...
// это ограничение можно убрать, сделав например
// byte[] b = new byte[text.Length + 1];
if (text.Length > 11) throw new ArgumentException("text");
byte[] b = new byte[12];
for (int i = 0; i < text.Length + 1; i++)
b[i] = 0xFF;
for (int i = 0; i < text.Length; i++)
{
byte val;
if (dic2.TryGetValue(text[i], out val))
b[i] = val;
}
return b;
}
static Dictionary<byte, char> dic = new Dictionary<byte, char>
{
{0x00, ' '},
{0x01, '!'},
{0x20, '@'},
{0x21, 'A'},
{0x22, 'B'},
{0x23, 'C'} // и т.д.
};
static Dictionary<char, byte> dic2 = new Dictionary<char, byte>();
static HeroMenuNameDecode()
{
foreach (var item in dic)
dic2[item.Value] = item.Key;
}
}
}