#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 оборачивается. Вы должны включить это.