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来说很小。
答案 0 :(得分:1)
Int16
的值太大了。尝试使用Convert.ToInt32
。
var pin = Convert.ToInt32(Networks[NetworkIndex, 0].Substring(Networks[NetworkIndex, 0].Length - 6)) % 10000000;
答案 1 :(得分:1)
使用Convert.ToInt32
代替Convert.ToInt16
。该值太大,无法容纳Int16
。
Int16
值类型表示有符号整数,其值范围从负32768
到正32767
。 307650
大于32767
,因此您应该使用更大的类型来存储值。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;
答案 2 :(得分:1)
你也可以使用int.TryParse("your number", out int)
这不会抛出任何异常(当你在字符串中得到null时)。如果它被解析则表示该值是正确的,或者您可以显式地从代码中抛出异常。
看看。