Vb.net 无法将int32强制转换为int16。Int16类型值太大或太小
我想将Int32值转换为Int16值。铸造时丢失的数据对我来说不是问题。但是,Vb.net 无法将int32强制转换为int16。Int16类型值太大或太小,vb.net,casting,overflowexception,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转换为&
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,那么我应该怎么做
任何帮助都将不胜感激。正如我在评论中所说,我认为您的强制转换无效,因为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
如果在整个项目中进行强制转换和算术运算(包括除零)时可以忽略
OverflowException
,我建议您设置编译器选项
在Visual Studio集成开发中设置/删除检查的步骤
环境
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"))
我已经修复了你的标记-
OverflowException
和StackOverflowException
非常不同。你得到OverflowException错误是因为你的int32值大于Int16.MaxValue或小于Int16.MinValue.IMO如果我必须检查限制或在施放前使用try..catch,这将不是很好,因为代码会更长。Dim num2作为Int16=CShort(IIf((num和&HFFFF)<32768,(num和&HFFFF),(num和&HFFFF)-65536))
它生成FFFFFFF
和68DB
,因为ToString
默认情况下打印十进制字符串,而删除在这里并不太合理。我将转换为Dim num2的过程更正为Int16=Convert.ToInt16(num.ToString(“X8”).Substring(num.ToString(“X8”).Length-4,4),16)
。谢谢我会接受你的答案,如果你能纠正它产生正确的输出。1+用于information@QuangYen:给你。