1

我想将 Int32 值转换为 Int16 值。投射时丢失的数据对我来说不是问题。但是 aSystem.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 那么我该怎么办。

任何帮助,将不胜感激。

4

2 回答 2

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
于 2015-02-24T08:13:57.023 回答
1

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

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

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

并且,无论该选项如何,Convert.ToInt16()仍然会生成。OverflowException要从该选项中受益,您可以使用CTypeorCShort代替。

Dim num As Int32 = &HFFFFFFF
Dim num2 As Int16 = CType(num, Int16)
Debug.WriteLine(num.ToString("X4"))
Debug.WriteLine(num2.ToString("X4"))
于 2015-02-24T09:26:52.650 回答