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

前端 未结 3 1892
刺人心
刺人心 2021-01-18 07:12

What is the equivalent of (byte) in VB.NET:

C#:

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

data = 137

VB.NET:<

相关标签:
3条回答
  • 2021-01-18 07:46

    Try first chopping the most significant bytes off the number, then converting it to Byte:

    Dim value As UInteger = 1161 
    Dim data1 As Byte = CType(value And 255, Byte)
    Dim data2 As Byte = CByte(value And 255)
    
    0 讨论(0)
  • 2021-01-18 07:47

    By default, C# does not check for integer overflows, but VB.NET does.

    You get the same exception in C# if you e.g. wrap your code in a checked block:

    checked
    {
        uint value = 1161;
        byte data = (byte)value;
    }
    

    In your VB.NET project properties, enable Configuration Properties => Optimizations => Remove Integer Overflow Checks, and your VB.NET code will work exactly like your C# code.

    Integer overflow checks are then disabled for your entire project, but that's usually not a problem.

    0 讨论(0)
  • 2021-01-18 08:05

    To get just the most significant byte, you can do the rather hackalicious

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

    It's explicit, and you wouldn't need to disable overflow checking.

    0 讨论(0)
提交回复
热议问题