Solidez - Conversões
A solidez permite a conversão implícita e explícita. O compilador Solidity permite a conversão implícita entre dois tipos de dados, desde que nenhuma conversão implícita seja possível e não haja perda de informações. Por exemplo, uint8 é conversível em uint16, mas int8 é conversível em uint256, pois int8 pode conter valores negativos não permitidos em uint256.
Conversão Explícita
Podemos converter explicitamente um tipo de dados em outro usando a sintaxe do construtor.
int8 y = -3;
uint x = uint(y);
//Now x = 0xfffff..fd == two complement representation of -3 in 256 bit format.
A conversão para um tipo menor custa bits de pedido maiores.
uint32 a = 0x12345678;
uint16 b = uint16(a); // b = 0x5678
A conversão para um tipo superior adiciona bits de preenchimento à esquerda.
uint16 a = 0x1234;
uint32 b = uint32(a); // b = 0x00001234
A conversão para um byte menor custa mais dados do pedido.
bytes2 a = 0x1234;
bytes1 b = bytes1(a); // b = 0x12
A conversão para byte maior adiciona bits de preenchimento à direita.
bytes2 a = 0x1234;
bytes4 b = bytes4(a); // b = 0x12340000
A conversão entre bytes de tamanho fixo e int só é possível quando ambos são do mesmo tamanho.
bytes2 a = 0x1234;
uint32 b = uint16(a); // b = 0x00001234
uint32 c = uint32(bytes4(a)); // c = 0x12340000
uint8 d = uint8(uint16(a)); // d = 0x34
uint8 e = uint8(bytes1(a)); // e = 0x12
Números hexadecimais podem ser atribuídos a qualquer tipo inteiro se nenhum truncamento for necessário.
uint8 a = 12; // no error
uint32 b = 1234; // no error
uint16 c = 0x123456; // error, as truncation required to 0x3456