【问题标题】:System.OverflowException in converting js to C#System.OverflowException 将 js 转换为 C#
【发布时间】:2015-06-26 12:06:01
【问题描述】:
var pin = parseInt(form.mac.value.slice(-6), 16) % 10000000;

我正在像这样将JS 转换为C#

var pin = Convert.ToInt16(Networks[NetworkIndex, 0].Substring(Networks[NetworkIndex, 0].Length - 6)) % 10000000;

然后我得到这个错误

“System.OverflowException”类型的未处理异常发生在 mscorlib.dll 附加信息:值太大或太大 对于 Int16 来说很小。

【问题讨论】:

  • Networks[NetworkIndex, 0].Substring(Networks[NetworkIndex, 0].Length - 6)) 的确切值是多少?
  • 该值为来自mac地址的6位数字14:cc:20:30:76:50 -> 307650

标签: javascript c# .net


【解决方案1】:

Int16 的值太大。尝试使用Convert.ToInt32

var pin = Convert.ToInt32(Networks[NetworkIndex, 0].Substring(Networks[NetworkIndex, 0].Length - 6)) % 10000000;

【讨论】:

    【解决方案2】:

    使用Convert.ToInt32 代替Convert.ToInt16。值太大,无法放入 Int16

    Int16 值类型表示有符号整数,其值范围从负 32768 到正 3276730765032767 大得多,所以你应该使用更大的类型来存储值。Int16 使用 2 个字节的内存来存储整数值,Int32 将使用 4 个字节并且可以设法存储更大的值整数范围。 Int32 是一种不可变值类型,它表示有符号整数,其值范围从负 2,147,483,648 到正 2,147,483,647。

    试试这个

    var pin = Convert.ToInt32(Networks[NetworkIndex, 0].Substring(Networks[NetworkIndex, 0].Length - 6)) % 10000000;
    

    【讨论】:

      【解决方案3】:

      你也可以使用int.TryParse("your number", out int) 这不会抛出任何异常(当你在字符串中得到空值时)。如果已解析,则表示该值是正确的,或者您可以从代码中显式抛出异常。

      看看吧。

      Int.TryParse

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-25
        • 2011-03-29
        • 2017-05-24
        • 2012-04-28
        • 1970-01-01
        • 2016-07-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多