Quando tentamos forçar o casting de um tipo numérico, de maior tamanho para um menor tamanho,
um erro ou exception é lançado como no exemplo abaixo que utilizamos CByte para o casting.
Casting
UShort -> Byte 'Com perda de dados
Byte -> UShort 'Sem perda de dados
Exemplo 4
Imports System
Public Class Program
Public Shared Sub Main()
Dim valor1 As UShort = 256
Dim valor2 As Byte = CByte(valor1) 'Byte não comporta short
End Sub
End Class
Saída
Unhandled Exception:
System.OverflowException: Arithmetic operation resulted in an overflow.
Para contornar esse problema, utilizando a mesma CByte, fazemos uso do truncamento de bits
mais significativos da variável de maior tamanho como mostrado logo abaixo:
Sintaxe
variavel And &HFF
Exemplo 5
Imports System
Public Class Program
Public Shared Sub Main()
Dim valor1 As UShort = 258 '0102h
Dim valor2 As Byte = CByte(valor1 And &Hff) 'truncamento 01h para 00h
Console.WriteLine(valor2)
End Sub
End Class
Saída
2
Nesse casting acima, como “saímos” de um a variável do tipo short(16-bits) para byte(8-bits),
houve a perda de dados.
O casting sem perda de dados ocorre quando um tipo de menor tamanho é convertido para um de maior
tamanho como mostrado abaixo.
Exemplo 6
Imports System
Public Class Program
Public Shared Sub Main()
Dim valor2 As UShort = CByte(&Hff) 'Byte -> 00FFh
Console.WriteLine(valor2)
End Sub
End Class
Saída
255