堅牢性-変換
Solidityにより、暗黙的および明示的な変換が可能になります。Solidityコンパイラーでは、暗黙的な変換が不可能であり、情報が失われない限り、2つのデータ型間の暗黙的な変換が可能です。たとえば、uint8はuint16に変換可能ですが、int8にはuint256で許可されていない負の値を含めることができるため、int8はuint256に変換可能です。
明示的な変換
コンストラクター構文を使用して、データ型を別のデータ型に明示的に変換できます。
int8 y = -3;
uint x = uint(y);
//Now x = 0xfffff..fd == two complement representation of -3 in 256 bit format.
より小さなタイプへの変換は、より高次のビットを要します。
uint32 a = 0x12345678;
uint16 b = uint16(a); // b = 0x5678
上位タイプに変換すると、左側にパディングビットが追加されます。
uint16 a = 0x1234;
uint32 b = uint32(a); // b = 0x00001234
小さいバイトへの変換には、高次のデータが必要です。
bytes2 a = 0x1234;
bytes1 b = bytes1(a); // b = 0x12
より大きなバイトに変換すると、右側にパディングビットが追加されます。
bytes2 a = 0x1234;
bytes4 b = bytes4(a); // b = 0x12340000
固定サイズのバイトと整数の間の変換は、両方が同じサイズの場合にのみ可能です。
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
切り捨てが必要ない場合は、16進数を任意の整数型に割り当てることができます。
uint8 a = 12; // no error
uint32 b = 1234; // no error
uint16 c = 0x123456; // error, as truncation required to 0x3456