C# - int.Parse帮助?

时间:2011-11-25 19:44:31

标签: c# string parsing int

我正在尝试将一串字符转换为每个字符十进制形式,然后用随机选择的符号分隔它们,然后在转换后,从字符串中分离十进制数字,然后将这些数字加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;
        }

以下是一个例子:

正常:“你好” 转换为十进制符号:72 $ 101&amp; 108#108 @ 111% 转换为ascii(没有符号并添加1):Ifmmp(我必须用ascii表做)

4 个答案:

答案 0 :(得分:3)

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 :(得分:3)

你应该切换这些线,这样你就可以避免用空字符串调用Parse。

string[] tokens = data.Split('@', '#', '$', '%', '&');
data = data.TrimEnd('@', '#', '$', '%', '&');

答案 2 :(得分:1)

data.Split调用包含空字符串(检查tokens结果)。您可以按如下方式删除空条目:

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

答案 3 :(得分:0)

您是否尝试过使用

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