二进制字符串到整数

我有一个由用户输入的二进制字符串,我需要将其转换为整数。

起初我天真地使用了这条简单的线:

Convert.ToInt32("11011",2); 

不幸的是,如果用户直接输入整数,则抛出exception。

 Convert.ToInt32("123",2); // throws Exception 

如何确保用户输入的字符串实际上是二进制字符串?

  • try..catch ….但那太难看了。
  • 类似’Int32.TryParse’的东西也许。

谢谢

您可以使用正则Regex检查它是“^ [01] + $”(或更好,“^ [01] {1,32} $”), 然后使用Convert

当然,exception不太可能是一个巨大的问题! 不雅? 也许。 但他们的工作。

示例(格式化为垂直空间):

 static readonly Regex binary = new Regex("^[01]{1,32}$", RegexOptions.Compiled); static void Main() { Test(""); Test("01101"); Test("123"); Test("0110101101010110101010101010001010100011010100101010"); } static void Test(string s) { if (binary.IsMatch(s)) { Console.WriteLine(Convert.ToInt32(s, 2)); } else { Console.WriteLine("invalid: " + s); } } 

感谢非常快速的答案!

不幸的是,我的要求发生了变化。 现在用户几乎可以输入任何格式。 二进制,十进制,hex。 所以我决定尝试 – catch只提供最简单,最干净的解决方案。

所以,为了好的衡量,我发布了我现在正在使用的代码。 我认为它非常清晰,甚至有点优雅,或者我认为^^。

 switch (format) { case VariableFormat.Binary: try { result = Convert.ToInt64(value, 2) } catch { // error handling } break; case VariableFormat.Decimal: try { result = Convert.ToInt64(value, 10) } catch { // error handling } break; case VariableFormat.Hexadecimal: try { result = Convert.ToInt64(value, 16) } catch { // error handling } break; } 

所以感谢鼓励我使用try-catch,我认为这确实提高了我的代码的可读性。

谢谢