Os tipos de dados com uma menor capacidade de dados podem ser implicitamente "convertidos"
para dados com maior capacidade de armazenamento, desde que sejam do mesmo tipo, sem perda
de dados.
Casting
i8 > i16 > i61 > i32
f32 > f64
Onde
> : sentido do casting
Para isso, o método into deve ser utilizando na variável de origem com menor tamanho de dados
como mostrado no exemplo abaixo:
Sintaxe
nome_var1 = nome_var2.into()
Exemplo 1
fn main() {
let valor8:i8 = 8;
let valor16:i16 = valor8.into();
}
Saída
-
Ao tentarmos realizar o casting um tipo de dado de maior armazenamento para um tipo de dado
com menor armazenamento, é necessário utilizar a palavra reservada as, que realiza o
casting explícito. Lembrando que nesses casos há perda de dados.
Casting entre tipos de dados sinalizadas e não sinalizados também necessitam do uso da palavra
reservada as.
Sintaxe
nome_var1 = nome_var2 as <tipo_destino>
Onde
<tipo_destino>: tipo de dado para qual desejamos fazer a conversão
as: operador de conversão explícita
Exemplo 2
fn main() {
//i16 p/ i8 usando "as"
let valor16:i16 = 512;
let mut valor8:i8 = valor16 as i8;
//i8 p/ u8
let valor1:i8 = 10;
let mut valoru8:u8 = valor1 as u8;
//char p/ i8,u8
let valorChar:char = 'Z';
let mut valor2:i8 = valorChar as i8;
let mut valor3:u8 = valorChar as u8;
}
Saída
-