1

我的十六进制转换器在转换有效十六进制时工作正常,但在转换无效十六进制时给我一个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;
}
4

2 回答 2

1

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

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

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

于 2013-08-15T09:05:30.417 回答
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;
}
于 2013-08-15T09:06:10.980 回答