Как поставить условие на количество букв/знаков? - 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;
        }
    }
}

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


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

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

13   голосов , оценка 3.692 из 5
Похожие ответы