Solidity - 型別轉換



Solidity 允許隱式和顯式型別轉換。Solidity 編譯器允許在兩種資料型別之間進行隱式轉換,前提是沒有隱式轉換的可能性並且沒有資訊丟失。例如,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

如果不需要截斷,十六進位制數可以賦值給任何整數型別。

uint8 a = 12; // no error
uint32 b = 1234; // no error
uint16 c = 0x123456; // error, as truncation required to 0x3456
廣告
© . All rights reserved.