尝试从十六进制转换为十进制和二进制,但如果在f后输入字母则显示错误



我在c#中创建了这个代码,将用户输入的十六进制数转换为十进制和二进制,代码确实如此,但我希望代码运行,以便如果用户输入一个不在a-f之间的字母,一个消息框显示一条消息,告诉用户他们的输入无效,但不是这样做,代码给了我一个错误。有人能帮我吗?

bool valid = false;
string hexadecimalnum = HexadecimalTxt.Text;

检查用户输入的数字是否在0-9和a-f之间(小写或大写)

if(Regex.IsMatch(hexadecimalnum, "[^-9A-F]+$") || Regex.IsMatch(hexadecimalnum, "[^-9a-     f]+$"))
{
// if the hex value is in between 0-9 and a-f then the condition is true  
valid = true;
}

由于条件为真,将十六进制数转换为二进制和十进制

if(valid)
{
DecimalTxt.Text = Convert.ToInt32(hexadecimalnum, 16).ToString();
int temp = Convert.ToInt32(hexadecimalnum, 16);
BinaryTxt.Text = Convert.ToString(temp, 2);
}
// the condition is not true so print out a invalid number message
else
{
MessageBox.Show("Invalid - please enter a hexadecimal value in this box");
}

所以,经过一些测试和谷歌搜索,我认为这是你的正则表达式模式。

这里的另一个答案有效:使用正则表达式

验证十六进制字符串我测试了匹配,它工作得很好。"^ (0 | 0 x) ? [a-fA-F0-9] +美元">

如果您不想要0x,请使用:"^[a-fA-F0-9]+$">

我发现使用像http://regexstorm.net/tester这样的在线测试器很有帮助。

试试这个解决方案:

if (Regex.IsMatch(s, @"Ab[0-9a-fA-F]+bZ"))
{
int temp = int.Parse(hexadecimalnum, System.Globalization.NumberStyles.HexNumber);
DecimalTxt.Text= temp.ToString();
BinaryTxt.Text = Convert.ToString(temp, 2); 
} 
else
{
MessageBox.Show("Invalid - please enter a hexadecimal value in this box");
}

或者您可以使用TryPrase() Int64_TryParse来检查字符串是否有效

long temp ;
if(long.TryParse(hexadecimalnum, System.Globalization.NumberStyles.HexNumber, null, out  temp))
{
DecimalTxt.Text= temp.ToString();
BinaryTxt.Text = Convert.ToString(temp, 2); 
}

相关内容