无法将 int32 转换为 int16。 int16类型值太大或太小
Cannot cast int32 to int16. Int16 type value is too large or too small
我想将 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 那么我应该怎么做。
如有任何帮助,我们将不胜感激。
我认为,正如我在评论中所说,您的转换无效,因为 int16 具有 maxValue
和 MinValue
,而您的 int32 显然不在两者之间。
尝试以下操作以更清楚地查看您的错误:
Debug.WriteLine(Int16.MaxValue.ToString)
Debug.WriteLine(Int16.MinValue.ToString)
Debug.WriteLine(num.ToString)
最好的解决方法是 trim 每次转换时将 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
,我建议您设置编译器选项 /removeintchecks
。
To set /removeintchecks in the Visual Studio integrated development
environment
- Have a project selected in Solution Explorer. On the Project menu, click Properties. For more information, see Introduction to the Project Designer.
- Click the Compile tab.
- Click the Advanced button.
- Modify the value of the Remove integer overflow checks box.
而且,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"))
我想将 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 那么我应该怎么做。
如有任何帮助,我们将不胜感激。
我认为,正如我在评论中所说,您的转换无效,因为 int16 具有 maxValue
和 MinValue
,而您的 int32 显然不在两者之间。
尝试以下操作以更清楚地查看您的错误:
Debug.WriteLine(Int16.MaxValue.ToString)
Debug.WriteLine(Int16.MinValue.ToString)
Debug.WriteLine(num.ToString)
最好的解决方法是 trim 每次转换时将 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
,我建议您设置编译器选项 /removeintchecks
。
To set /removeintchecks in the Visual Studio integrated development environment
- Have a project selected in Solution Explorer. On the Project menu, click Properties. For more information, see Introduction to the Project Designer.
- Click the Compile tab.
- Click the Advanced button.
- Modify the value of the Remove integer overflow checks box.
而且,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"))