十六进制转换器ArgumentOutOfRangeException

时间:2013-08-15 08:59:58

标签: c# exception

我的十六进制转换器在转换有效的十六进制时工作正常,但在转换无效的十六进制时它给我ArgumentOutOfRangeException错误,我不知道如何处理这个异常。

我的代码:

public string DecryptHex(ref string Data)
{
    string Data1 = "";
    string inData = "";
    while (Data.Length > 0)
    {
        Data1 = System.Convert.ToChar(System.Convert.ToUInt32(Data.Substring(0, 2), 16)).ToString();
        inData = inData + Data1;
        Data = Data.Substring(2, Data.Length - 2);
    }
    return inData;
}

2 个答案:

答案 0 :(得分:1)

如果没有收到有效的十六进制数字,我不确定你希望你的方法返回什么,但是你可能想测试你的字符串,如果它是一个带有以下正则表达式的有效十六进制数字:

Regex.IsMatch(test, @"\A\b[0-9a-fA-F]+\b\Z");

虽然,我建议您保持原样,如果参数错误,请让您的方法抛出异常。您应该在更高级别上进行错误处理以从中恢复。

答案 1 :(得分:1)

使用以下正则表达式检查您的数据是否有效:

if (System.Text.RegularExpressions.Regex.IsMatch(Data, "0[xX][0-9a-fA-F]+")) {
}

-

public string DecryptHex(ref string Data)
{
    string inData = string.Empty;
    if (System.Text.RegularExpressions.Regex.IsMatch(Data, "0[xX][0-9a-fA-F]+")) {
        string Data1 = "";
        while (Data.Length > 0)
        {
            Data1 = System.Convert.ToChar(System.Convert.ToUInt32(Data.Substring(0, 2), 16)).ToString();
            inData = inData + Data1;
            Data = Data.Substring(2, Data.Length - 2);
        }
    }
    return inData;
}