Кодирование ulong-значения в string-строку с заданным символьным словарём и обратное декодирование - C#

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

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

Мне необходимо осуществить кодирование ulong-значения в string-строку с заданным символьным словарём и обратное декодирование.

С кодированием ulong-значения в string-строку с заданным символьным словарём я разобралась. Соответствующий код выглядит так.
public static string ConvertULongToBaseDictionary(ulong number)
        {
            var validCharacters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%";
            char[] charArray = validCharacters.ToCharArray();
            var buffer = new StringBuilder();
            var quotient = number;
            ulong remainder;
            while (quotient != 0)
            {
                remainder = quotient % (ulong)charArray.LongLength;
                quotient = quotient / (ulong)charArray.LongLength;
                buffer.Insert(0, charArray[remainder].ToString());
            }
            return buffer.ToString();
        }
А вот с обратным декодированием полученной string-строки с заданным символьным словарём в соответствующее ulong-значение я запуталась.

Помогите, пожалуйста, реализовать алгоритм обратного декодирования полученной string-строки с заданным символьным словарём в ulong-значение.

Таким образом, мне нужно в конце концов проверить совпадает ли полученное ulong-значение после декодирования с исходным значением, принятым в качестве исходного при кодировании. Заранее благодарю за помощь.
Можно воспользоваться значением ulong.MaxValue при осуществлении проверки правильности кодирования/декодирования в качестве тестового значения.

Решение задачи: «Кодирование ulong-значения в string-строку с заданным символьным словарём и обратное декодирование»

textual
Листинг программы
        const string chars = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%";
 
        public static string ConvertULongToBase(ulong number)
        {
            var buffer = new StringBuilder();
            var quotient = number;
            ulong remainder;
            while (quotient != 0)
            {
                remainder = quotient % (ulong)chars.Length;
                quotient = quotient / (ulong)chars.Length;
                buffer.Insert(0, chars[(int)remainder]);
            }
            return buffer.ToString();
        }
 
        public static ulong ConvertBaseToULong(string str)
        {
            var mult = 1ul;
            var res = 0ul;
            for (int i = str.Length - 1; i >= 0; i--)
            {
                res += (ulong)chars.IndexOf(str[i]) * mult;
                mult *= (ulong)chars.Length;
            }
 
            return res;
        }

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


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

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

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