我想将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,那我应该怎么做。
任何帮助都将不胜感激。
答案 0 :(得分:1)
我认为,正如我在评论中所说,你的演员表是无效的,因为int16有maxValue
和MinValue
你的int32显然不介于其中。
请尝试以下方法更清楚地查看错误:
Debug.WriteLine(Int16.MaxValue.ToString)
Debug.WriteLine(Int16.MinValue.ToString)
Debug.WriteLine(num.ToString)
你最好的解决方法是在转换时修剪你的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 环境
- 在解决方案资源管理器中选择了一个项目。在项目菜单上,单击属性。有关更多信息,请参见项目设计器简介。
- 单击“编译”选项卡。
- 单击“高级”按钮。
- 修改“删除整数溢出”复选框的值。
醇>
而且,无论该选项如何,Convert.ToInt16()
仍会生成OverflowException
。要从该选项中受益,您可以改为使用CType
或CShort
。
Dim num As Int32 = &HFFFFFFF
Dim num2 As Int16 = CType(num, Int16)
Debug.WriteLine(num.ToString("X4"))
Debug.WriteLine(num2.ToString("X4"))