Solidność - konwersje
Solidność umożliwia zarówno niejawną, jak i jawną konwersję. Kompilator Solidity umożliwia niejawną konwersję między dwoma typami danych, pod warunkiem, że nie jest możliwa żadna niejawna konwersja i nie ma utraty informacji. Na przykład uint8 można zamienić na uint16, ale int8 można zamienić na uint256, ponieważ int8 może zawierać wartość ujemną niedozwoloną w uint256.
Jawna konwersja
Możemy jawnie przekonwertować typ danych na inny za pomocą składni konstruktora.
int8 y = -3;
uint x = uint(y);
//Now x = 0xfffff..fd == two complement representation of -3 in 256 bit format.
Konwersja na mniejszy typ kosztuje wyższe bity.
uint32 a = 0x12345678;
uint16 b = uint16(a); // b = 0x5678
Konwersja na wyższy typ dodaje bity wypełnienia po lewej stronie.
uint16 a = 0x1234;
uint32 b = uint32(a); // b = 0x00001234
Konwersja na mniejszy bajt kosztuje wyższe dane zamówienia.
bytes2 a = 0x1234;
bytes1 b = bytes1(a); // b = 0x12
Konwersja na większy bajt dodaje bity wypełniające po prawej stronie.
bytes2 a = 0x1234;
bytes4 b = bytes4(a); // b = 0x12340000
Konwersja między bajtami o stałym rozmiarze i int jest możliwa tylko wtedy, gdy oba mają ten sam rozmiar.
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
Liczby szesnastkowe można przypisać do dowolnego typu liczby całkowitej, jeśli nie jest potrzebne obcinanie.
uint8 a = 12; // no error
uint32 b = 1234; // no error
uint16 c = 0x123456; // error, as truncation required to 0x3456