Не удается преобразовать массив символов в значение int в C#

#c# #arrays #casting

#c# #массивы #Кастинг

Вопрос:

Я создаю шифр caesar и пытаюсь преобразовать значение символа каждой буквы в значение int, чтобы значение сдвига могло его изменить.

 for (int i = 0; i < plainTextInput.Length;   i)
{
   chars[i] = ((int)chars[i])   shiftAmount;         
}
  

Он говорит, что не может преобразовать int в char. Как мне решить эту проблему?

Комментарии:

1. Похоже, что chars[] — это массив символов. Если это так, вам нужно преобразовать его обратно в символ: chars[i]=(char)((int)chars[i]) shiftAmount;

Ответ №1:

Вы должны явно отбросить его обратно:

 for (int i = 0; i < plainTextInput.Length;   i)
{
   chars[i] = (char)(((int)chars[i])   shiftAmount);         
}
  

Однако вы довольно быстро столкнетесь с проблемами, как только пройдете мимо z .

Ответ №2:

Когда я компилирую этот код, я получаю следующее сообщение об ошибке:

Не удается неявно преобразовать тип ‘int’ в ‘char’. Существует явное преобразование (вам не хватает приведения?)

Почему да, вам не хватает приведения:

 chars[i] = (char)(((int)chars[i])   shiftAmount);
  

Ответ №3:

Путем явного приведения:

 chars[i] = (char)(((int)chars[i])   shiftAmount);     
  

Я бы переписал ваш цикл:

 var enciphered = chars.Select(c => (char)((int)c   shiftAmount)).ToArray();
  

Что вы планируете делать, если перейдете на непечатаемый символ? Стандартный шифр Caesar оборачивается. Вы должны включить это.