二进制字符串到整数

eri*_*ric 26 c# string binary integer

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

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

Convert.ToInt32("11011",2);
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果用户直接输入整数,则抛出异常.

Convert.ToInt32("123",2); // throws Exception
Run Code Online (Sandbox Code Playgroud)

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

  • try..catch ....但那太难看了.
  • 像"Int32.TryParse"这样的东西也许吧.

谢谢

Mar*_*ell 30

您可以使用a 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么要拒​​绝呢?它是一个有效的 32 位二进制值。如果您选择将其解释为 int32 那么可以肯定:任何具有 msb 集的内容都将是负数......并且? (2认同)