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

การแปลงระหว่างไบต์ขนาดคงที่และ 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

ตัวเลขฐานสิบหกสามารถกำหนดให้กับประเภทจำนวนเต็มใดก็ได้หากไม่จำเป็นต้องมีการตัดทอน

uint8 a = 12; // no error
uint32 b = 1234; // no error
uint16 c = 0x123456; // error, as truncation required to 0x3456