ASCII код и Хэш код - C#

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

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

Вложение 572662Добрый день, в теме диплома получил задание на составление программы для расчета хэш кода, вроде бы все хорошо, товарищ с форума так же помог с кодом, но все оказалось не так сладко, так как в расчете слово разбивается согласно ASCII коду, таблица которую использует преподаватель отлична от той, которая является правильной и используется в программе. Я в принципе нашел закономерность и написал небольшой алгоритм чтобы они совпали, но беда в том, что в конечном расчете программа все равно использует то, что не нужно, просьба помочь. Так же прикрепляю таблицы кодов.(Оригинал - та что используется, актуальная - та что на учебе)
Листинг программы
  1. namespace ConsoleApplication8
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. do
  8. {
  9. Console.Clear();
  10. Console.WriteLine("Введите кодируемое слово");
  11. string s = Console.ReadLine();
  12. Console.WriteLine("Укажите значение n");
  13. int n = int.Parse(Console.ReadLine()); //получаем число n
  14. Console.WriteLine();
  15. var hash = GetHashCode(s, n);
  16. Console.WriteLine("Result hash: {0}\r\n", hash);
  17. Console.WriteLine("Для выхода нажмите ESC, для повтора - любую другую клавишу");
  18. }
  19. while (Console.ReadKey().Key != ConsoleKey.Escape);
  20. }
  21. static byte GetHashCode(string s, int divider)
  22. {
  23. int length = s.Length;
  24. int[] vich = new int[length];
  25. int[] f = new int[length];
  26. byte[] bytes = Encoding.GetEncoding(1251).GetBytes(s);
  27. //Начало алгоритма
  28. for (int i = 0; i < length; i++) //Выполнение условия, чтобы совпала таблица кодов с той которой необходимо.
  29. {
  30. if (bytes[i] < 240)
  31. {
  32. if (bytes[i] > 127)
  33. {
  34. vich[i] = bytes[i] - 64;
  35. f[i] = Convert.ToInt32(vich[i]);
  36. }
  37. else
  38. {
  39. vich[i] = bytes[i];
  40. f[i] = Convert.ToInt32(vich[i]);
  41. }
  42. }
  43. else
  44. {
  45. vich[i] = bytes[i] - 16;
  46. f[i] = Convert.ToInt32(vich[i]);
  47. }
  48. Console.WriteLine("{0} = {1}", s[i],vich[i]);
  49. //конец алгоритма
  50. }
  51. var hash = (byte)0;
  52. for (int i = 0; i < length; i++)
  53. {
  54. var left = (byte)(f[i] >> 4);//берем левые 4 бита
  55. GetHashCode(left, divider, ref hash);
  56. //Console.WriteLine("left = {0}", ToBin(left));
  57. var right = (byte)(f[i] & 0x0F);//берем правые 4 бита
  58. GetHashCode(right, divider, ref hash);
  59. //Console.WriteLine("right = {0}", ToBin(right));
  60. }
  61. return hash;
  62. }
  63. static void GetHashCode(byte m, int divider, ref byte h)
  64. {
  65. m = (byte)(m + 0xF0);//добавляем 11110000
  66. Console.Write("M: {0}", ToBin(m));
  67. m = (byte)(m ^ h);//сложение по модулю два с хешем
  68. Console.Write("M ^ H: {0} ", ToBin(m));
  69. h = (byte)((m * m) % divider);//возводим в квадрат и берем модуль по основанию divider
  70. Console.WriteLine("H: {0}", ToBin(h));
  71. }
  72.  
  73. //преобразование в строку в бинарном формате, для вывода на экран
  74. static string ToBin(int v)
  75. {
  76. return Convert.ToString(v, 2).PadLeft(8, '0');
  77. }
  78. }
  79. }

Решение задачи: «ASCII код и Хэш код»

textual
Листинг программы
  1. byte[] bytes = Encoding.GetEncoding(1251).GetBytes(s);
  2. =>
  3. byte[] bytes = Encoding.GetEncoding("CP866").GetBytes(s);

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут