无法将int32转换为int16。 Int16类型值太大或太小

时间:2015-02-24 07:18:36

标签: vb.net casting overflowexception

我想将Int32值转换为Int16值。在施法时丢失的数据对我来说不是问题。但是System.OverflowException表示Int16类型值太大或太小。

Dim num As Int32 = &HFFFFFFF
Dim num2 As Int16 = Convert.ToInt16(num)
Debug.WriteLine(num.ToString("X4"))
Debug.WriteLine(num2.ToString("X4"))

如果我想将Int32& HFFFFFFF转换为& HFFFF,那我应该怎么做。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我认为,正如我在评论中所说,你的演员表是无效的,因为int16有maxValueMinValue你的int32显然不介于其中。

请尝试以下方法更清楚地查看错误:

 Debug.WriteLine(Int16.MaxValue.ToString)
 Debug.WriteLine(Int16.MinValue.ToString)
 Debug.WriteLine(num.ToString)

enter image description here

你最好的解决方法是在转换时修剪你的int32的最后4个F,如果你仍然坚持这样做:

 Sub Main()
        Dim num As Int32 = &HFFFFFFF
        Dim num2 As Int16 = Convert.ToInt16(num.ToString("X8").Substring(num.ToString("X8").Length - 4, 4), 16)
        Debug.WriteLine(num.ToString("X4"))
        Debug.WriteLine(num2.ToString("X4"))
        Console.ReadLine()
    End Sub

答案 1 :(得分:1)

如果你可以在整个项目中进行转换和算术运算(包括除零)时忽略OverflowException,我建议你设置编译器选项/removeintchecks

  

在Visual Studio集成开发中设置/ removeintchecks   环境

     
      
  1. 在解决方案资源管理器中选择了一个项目。在项目菜单上,单击属性。有关更多信息,请参见项目设计器简介。
  2.   
  3. 单击“编译”选项卡。
  4.   
  5. 单击“高级”按钮。
  6.   
  7. 修改“删除整数溢出”复选框的值。
  8.   

而且,无论该选项如何,Convert.ToInt16()仍会生成OverflowException。要从该选项中受益,您可以改为使用CTypeCShort

Dim num As Int32 = &HFFFFFFF
Dim num2 As Int16 = CType(num, Int16)
Debug.WriteLine(num.ToString("X4"))
Debug.WriteLine(num2.ToString("X4"))