二进制字符串到整数

时间:2009-08-13 12:05:28

标签: c# string binary integer

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

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

Convert.ToInt32("11011",2);

不幸的是,如果用户直接输入整数,则会引发异常。

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

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

  • try..catch ....但那太难看了。
  • 类似'Int32.TryParse'的东西。

由于

2 个答案:

答案 0 :(得分:29)

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

当然,异常不太可能无论如何都是一个巨大的问题!不雅?也许。但他们工作。

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

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);
    }
}

答案 1 :(得分:4)

感谢这个伟大且令人难以置信的快速回答!

不幸的是我的要求发生了变化。现在用户可以输入任何格式。二进制,十进制,十六进制。所以我决定尝试 - 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,我认为这确实提高了我的代码的可读性。

由于