Sağlamlık - Dönüşümler
Solidity, örtük ve açık dönüşüme izin verir. Solidity derleyicisi, örtük dönüştürme mümkün olmadığı ve bilgi kaybı olmadığı sürece iki veri türü arasında örtük dönüşüme izin verir. Örneğin uint8, uint16'ya dönüştürülebilir, ancak int8, uint256'da izin verilmeyen negatif bir değer içerebildiğinden, int8 uint256'ya dönüştürülebilir.
Açık Dönüşüm
Yapıcı sözdizimini kullanarak bir veri türünü açıkça diğerine dönüştürebiliriz.
int8 y = -3;
uint x = uint(y);
//Now x = 0xfffff..fd == two complement representation of -3 in 256 bit format.
Daha küçük türe dönüştürme, daha yüksek sipariş bitlerine mal olur.
uint32 a = 0x12345678;
uint16 b = uint16(a); // b = 0x5678
Daha yüksek türe dönüştürme, sola dolgu bitleri ekler.
uint16 a = 0x1234;
uint32 b = uint32(a); // b = 0x00001234
Daha küçük bayta dönüştürme, daha yüksek sipariş verilerine mal olur.
bytes2 a = 0x1234;
bytes1 b = bytes1(a); // b = 0x12
Daha büyük bayta dönüştürme, sağ tarafa dolgu bitleri ekler.
bytes2 a = 0x1234;
bytes4 b = bytes4(a); // b = 0x12340000
Sabit boyutlu bayt ve int arasındaki dönüşüm yalnızca her ikisi de aynı boyutta olduğunda mümkündür.
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
Onaltılık sayılar, kesme gerekmiyorsa herhangi bir tam sayı türüne atanabilir.
uint8 a = 12; // no error
uint32 b = 1234; // no error
uint16 c = 0x123456; // error, as truncation required to 0x3456