Solidity - Chuyển đổi
Solidity cho phép chuyển đổi ngầm định cũng như rõ ràng. Trình biên dịch Solidity cho phép chuyển đổi ngầm định giữa hai kiểu dữ liệu miễn là không thể chuyển đổi ngầm định và không mất thông tin. Ví dụ: uint8 có thể chuyển đổi thành uint16 nhưng int8 có thể chuyển đổi thành uint256 vì int8 có thể chứa giá trị âm không được phép trong uint256.
Chuyển đổi rõ ràng
Chúng ta có thể chuyển đổi một cách rõ ràng một kiểu dữ liệu sang kiểu khác bằng cách sử dụng cú pháp của hàm tạo.
int8 y = -3;
uint x = uint(y);
//Now x = 0xfffff..fd == two complement representation of -3 in 256 bit format.
Việc chuyển đổi sang loại nhỏ hơn sẽ tốn bit thứ tự cao hơn.
uint32 a = 0x12345678;
uint16 b = uint16(a); // b = 0x5678
Việc chuyển đổi sang loại cao hơn sẽ thêm các bit đệm ở bên trái.
uint16 a = 0x1234;
uint32 b = uint32(a); // b = 0x00001234
Việc chuyển đổi sang byte nhỏ hơn sẽ tốn dữ liệu thứ tự cao hơn.
bytes2 a = 0x1234;
bytes1 b = bytes1(a); // b = 0x12
Chuyển đổi sang byte lớn hơn thêm các bit đệm ở bên phải.
bytes2 a = 0x1234;
bytes4 b = bytes4(a); // b = 0x12340000
Chuyển đổi giữa byte kích thước cố định và int chỉ có thể thực hiện được khi cả hai đều có cùng kích thước.
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
Số thập lục phân có thể được gán cho bất kỳ kiểu số nguyên nào nếu không cần cắt bớt.
uint8 a = 12; // no error
uint32 b = 1234; // no error
uint16 c = 0x123456; // error, as truncation required to 0x3456