C # - int.Parse помочь? - PullRequest
       15

C # - int.Parse помочь?

0 голосов
/ 25 ноября 2011

Я пытаюсь преобразовать строку символов в десятичную форму каждого символа и разделить их символом, который выбирается случайным образом, а затем, после преобразования, отделить десятичные числа от строки, а затем добавить 1 к этим числам изатем преобразовать их обратно в символы ASCII.Вот что у меня есть, но он продолжает говорить неверный формат ввода с помощью int.Parse:

public string Encode(string data, out string asciiString) {
            char[] dataArray = data.ToCharArray();
            string[] symb = {"@","#","$","%","&"};
            Random rnd = new Random();
            string newData = "";
            for(int i = 0; i < dataArray.Length; i++) {
                newData += (((int)dataArray[i] + 1) + symb[rnd.Next(0, 5)].ToString()); // add 1 to the decimal and then add symbol
            }
            asciiString = ConvertToAscii(newData);
            return newData;
        }

        public string ConvertToAscii(string data) {
            string[] tokens = data.Split('@', '#', '$', '%', '&');
            data = data.TrimEnd('@', '#', '$', '%', '&');
            string returnString = "";
            for(int i = 0; i < tokens.Length; i++){

                int num = int.Parse(tokens[i]);

                returnString += (char)num;
            }
            return returnString;
        }

Вот пример:

Normal: «Hello» преобразуется в десятичное число с символами:72 $ 101 & 108 # 108 @ 111% преобразованы в ascii (без символов и добавления 1): Ifmmp (мне пришлось сделать это с таблицей ascii)

Ответы [ 4 ]

3 голосов
/ 25 ноября 2011

Вы должны переключить эти строки, чтобы избежать вызова Parse с пустой строкой.

string[] tokens = data.Split('@', '#', '$', '%', '&');
data = data.TrimEnd('@', '#', '$', '%', '&');
3 голосов
/ 25 ноября 2011

int.TryParse - почти всегда лучший способ обработки синтаксического анализа до int.Он принимает два аргумента, попробуйте заменить:

int num = int.Parse(tokens[i]);

на

int num;
if (!int.TryParse(tokens[i], out num))
{
    Debug.WriteLine(string.Format("'{0}' can't be converted to an int.", tokens[i]));
}

, и вы увидите, что происходит при неудачном разборе.

1 голос
/ 26 ноября 2011

Вызов data.Split содержит пустую строку (проверьте результат tokens). Вы можете удалить пустые записи следующим образом:

string[] tokens = data.Split(new[] {'@', '#', '$', '%', '&'},
                           StringSplitOptions.RemoveEmptyEntries);
0 голосов
/ 26 ноября 2011

Вы пытались использовать

string[] tokens = data.Split(new char[]{'@', '#', '$', '%', '&'},StringSplitOptions.RemoveEmptyEntries);
...