VB.NET 中“(字节)”的等价物是啥?
Posted
技术标签:
【中文标题】VB.NET 中“(字节)”的等价物是啥?【英文标题】:What is the equivalent of "(byte)" in VB.NET?VB.NET 中“(字节)”的等价物是什么? 【发布时间】:2012-08-30 08:05:45 【问题描述】:VB.NET中(byte)
的等价物是什么:
C#:
uint value = 1161;
byte data = (byte)value;
数据 = 137
VB.NET:
Dim value As UInteger = 1161
Dim data1 As Byte = CType(value, Byte)
Dim data2 As Byte = CByte(value)
异常:算术运算导致溢出。
如何才能获得与 C# 相同的结果?
【问题讨论】:
一个字节可能存储255(无符号),C#默默地转换值,而VB好像没有。 【参考方案1】:要获取最重要的字节,您可以做一些相当hackalicious
Dim data1 = BitConvertor.GetBytes(value)(0)
这是明确的,您不需要禁用溢出检查。
【讨论】:
【参考方案2】:默认情况下,C# 不检查整数溢出,但 VB.NET 会。
如果你在 C# 中遇到相同的异常,例如将您的代码包装在 checked
块中:
checked
uint value = 1161;
byte data = (byte)value;
在您的 VB.NET 项目属性中,启用 配置属性 => 优化 => 删除整数溢出检查,然后您的 VB.NET代码将与您的 C# 代码完全一样。
然后对整个项目禁用整数溢出检查,但这通常不是问题。
【讨论】:
提议更改设置以禁用 all 溢出检查只是为了使一个语句有效。 禁用所有溢出检查根本不是问题(事实上,我从未遇到过这种情况)。如果你覆盖GetHashCode()
,你可能还是想禁用它。
@BigYellowCactus 你不知道溢出检查是否依赖于项目的其他地方。在没有现有代码的项目开始时更改此设置会很好,但在大型开发项目中,如果您这样做,则需要重新测试所有内容。【参考方案3】:
尝试首先从数字中删除最重要的字节,然后将其转换为字节:
Dim value As UInteger = 1161
Dim data1 As Byte = CType(value And 255, Byte)
Dim data2 As Byte = CByte(value And 255)
【讨论】:
以上是关于VB.NET 中“(字节)”的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章