关于c#:VB.NET中“(byte)”的等价物是什么?

What is the equivalent of “(byte)” in VB.NET?

vb.net中与(byte)等价的是什么:

C:

1
2
uint value = 1161;
byte data = (byte)value;

数据=137

VB.NET:

1
2
3
  Dim value As UInteger = 1161
  Dim data1 As Byte = CType(value, Byte)
  Dim data2 As Byte = CByte(value)

异常:算术运算导致溢出。

我怎样才能获得与C相同的结果?


默认情况下,C不检查整数溢出,但vb.net检查整数溢出。

如果将代码包装在checked块中,则在c中会得到相同的异常:

1
2
3
4
5
checked
{
    uint value = 1161;
    byte data = (byte)value;
}

在您的vb.net项目属性中,启用配置属性=>优化=>删除整数溢出检查,您的vb.net代码的工作方式与您的C代码完全相同。

然后对整个项目禁用整数溢出检查,但这通常不是问题。


尝试首先从数字中切掉最重要的字节,然后将其转换为字节:

1
2
3
Dim value As UInteger = 1161
Dim data1 As Byte = CType(value And 255, Byte)
Dim data2 As Byte = CByte(value And 255)


为了得到最重要的字节,您可以执行相当黑客的操作

1
Dim data1 = BitConvertor.GetBytes(value)(0)

它是显式的,您不需要禁用溢出检查。