Solidity-conversions
提供:Dev Guides
堅牢性-変換
堅牢性により、暗黙的および明示的な変換が可能になります。 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
固定サイズのバイトとintの間の変換は、両方が同じサイズの場合にのみ可能です。
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