2015-06-26 30 views
0
var pin = parseInt(form.mac.value.slice(-6), 16) % 10000000; 

我是JS转换为C#这样System.OverflowException在JS转换为C#

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

,然后我得到这个错误

类型的未处理的异常“系统.OverflowException'发生在 mscorlib.dll附加信息:对于Int16,值太大或太小 。

+1

什么是'网络[NetworkIndex,0] .Substring的值(网络[NetworkIndex,0]。长度 - 6))'是什么呢? –

+0

该值是来自mac地址14:cc:20:30:76:50 - > 307650的6位数字 –

回答

1

该值对于Int16来说太大。尝试使用Convert.ToInt32

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

使用Convert.ToInt32而不是Convert.ToInt16。该值太大而不适合Int16

Int16值类型表示值为范围从负数32768到正数32767的有符号整数。 30765032767大,因此您应该使用更大的类型来存储值。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; 
1

您还可以使用int.TryParse("your number", out int)这不会引发任何异常(如果你会得到字符串空)。如果它被解析,那么它意味着该值是正确的,或者你可以明确地抛出你的代码中的异常。

看一看。

Int.TryParse