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