【发布时间】:2015-02-24 07:18:35
【问题描述】:
我想将 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,我应该怎么做。
任何帮助将不胜感激。
【问题讨论】:
-
我已经修复了你的标签 -
OverflowException和StackOverflowException是非常不同的。 -
您收到 overflowException 错误,因为您的 int32 值大于 Int16.MaxValue 或小于 Int16.MinValue。
-
IMO 如果我必须在强制转换之前检查限制或使用 try..catch,那将不是很好,因为代码会更长。
-
Dim num2 As Int16 = CShort(IIf((num And &HFFFF) < 32768, (num And &HFFFF), (num And &HFFFF) - 65536))
标签: vb.net casting overflowexception