Solidity Conversões

Neste artigo, exploraremos os diferentes tipos de conversões disponíveis no Solidity e como elas podem ser usadas.

No Solidity, as conversões explícitas e implícitas são suportadas.

No compilador Solidity , a conversão implícita é permitida entre dois tipos de dados, desde que não seja possível realizar conversões implícitas e nenhuma informação seja perdida.

Pode-se ver que uint8 pode ser convertido em uint16 , mas int8 pode ser convertido em uint256 , pois int8 pode conter valores negativos, que não são permitidos em uint256 .

Este artigo discute as seguintes conversões:

  1. Conversões implícitas.
  2. Conversões explícitas.
  3. Conversões entre Literais e Tipos Elementares.


Solidity Conversões Implícitas

Eles ocorrem automaticamente quando variáveis ​​de um tipo são atribuídas a variáveis ​​de outro tipo.

Por exemplo, é possível converter implicitamente um inteiro em um número de ponto fixo ou uma string.

Uma função interna como uint() ou int() realiza essas operações.

O Solidity fornece a seguinte sintaxe para algumas das funções de conversão mais comuns:

 int() to uint():

O código fornecido converte o inteiro em unsigned integer() :

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function int_To_uint(int mrx) public pure returns(uint){
uint ample=uint(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>
Nota : Não é considerado uma boa prática converter int para uint porque int contém inteiros positivos e negativos, enquanto uint funciona apenas para valores positivos.
uint() to int()

A conversão implícita de uint() para int() pode ser feita da seguinte forma:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function uint_To_int(uint mrx) public pure returns(int){
int ample=int(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>
string to bytes()

A string pode ser convertida em bytes usando a conversão implícita da seguinte forma:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function string_to_byte(string memory mrx) public pure returns(bytes memory){
bytes memory ample = bytes(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>

Conversão Explícita

As conversões executadas explicitamente pelo desenvolvedor são conhecidas como conversões explícitas.

Em situações em que você não pode confiar em conversões implícitas, essas conversões são necessárias.

Também é necessário usar conversões explícitas quando você estiver executando operações em variáveis ​​distintas entre si.

A sintaxe do construtor nos permite converter tipos de dados explicitamente de um para outro.

int8 to uint:

A conversão explícita de int8 para uint pode ser feita como:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function int8_To_uint(int8 mrx) public pure returns(uint){
uint ample=uint8(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>
uint32 to uint16:

Para converter uint32 para uint16 , considere o exemplo abaixo:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function uint32_To_uint16(uint32 mrx) public pure returns(uint16){
uint16 ample=uint16(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>
uint16 to uint32:

Para converter uint16 em uint32 , consulte o exemplo abaixo:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function uint16_To_uint32(uint16 mrx) public pure returns(uint32){
uint32 ample=uint32(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>
bytes2 to bytes1:

O exemplo a seguir mostra a conversão de bytes2 para byte1 :

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function bytes2_To_bytes1(bytes2 mrx) public pure returns(bytes1){
bytes1 ample=bytes1(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>
bytes1 to bytes2:

Se você deseja converter bytes em bytes2 , pode seguir o exemplo fornecido:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function bytes1_To_bytes2(bytes1 mrx) public pure returns(bytes2){
bytes2 ample=bytes2(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>

 

bytes2 to bytes4:

O exemplo dado converte bytes2 em bytes4 :

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SolidityTest{
function bytes2_To_bytes4(bytes2 mrx) public pure returns(bytes4){
bytes4 ample=bytes4(mrx);
return ample;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>

Conclusão

Os mapeamentos de solidity oferecem uma maneira poderosa de armazenar e recuperar pares chave-valor com eficiência.

Os contratos inteligentes usam mapeamentos de várias maneiras, como rastreamento de saldos, rastreamento de propriedade e armazenamento de dados de forma descentralizada.

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone