Solidity - สตริง
Solidity รองรับ String literal โดยใช้ทั้ง double quote (") และ single quote (') ซึ่งจัดเตรียมสตริงเป็นชนิดข้อมูลเพื่อประกาศตัวแปรประเภท String
pragma solidity ^0.5.0;
contract SolidityTest {
string data = "test";
}
ในตัวอย่างข้างต้น "test" คือสตริงลิเทอรัลและข้อมูลคือตัวแปรสตริง วิธีที่ต้องการมากกว่าคือการใช้ประเภทไบต์แทน String เนื่องจากการทำงานของสตริงต้องใช้แก๊สมากกว่าเมื่อเทียบกับการทำงานแบบไบต์ Solidity ให้การแปลงแบบ inbuilt ระหว่างไบต์เป็นสตริงและในทางกลับกัน ใน Solidity เราสามารถกำหนด String literal ให้กับตัวแปรประเภท byte32 ได้อย่างง่ายดาย Solidity ถือว่าเป็นไบต์ 32 ลิเทอรัล
pragma solidity ^0.5.0;
contract SolidityTest {
bytes32 data = "test";
}
อักขระหลบหนี
ซีเนียร์ | ตัวละครและคำอธิบาย |
---|---|
1 | \n เริ่มบรรทัดใหม่ |
2 | \\ แบ็กสแลช |
3 | \' ใบเสนอราคาเดียว |
4 | \" อ้างสองครั้ง |
5 | \b Backspace |
6 | \f ฟีดรูปแบบ |
7 | \r การกลับรถ |
8 | \t แท็บ |
9 | \v แท็บแนวตั้ง |
10 | \xNN แสดงค่า Hex และแทรกไบต์ที่เหมาะสม |
11 | \uNNNN แสดงค่า Unicode และแทรกลำดับ UTF-8 |
ไบต์ในการแปลงสตริง
ไบต์สามารถแปลงเป็น String โดยใช้ตัวสร้าง string ()
bytes memory bstr = new bytes(10);
string message = string(bstr);
ตัวอย่าง
ลองใช้รหัสต่อไปนี้เพื่อทำความเข้าใจว่าสตริงทำงานอย่างไรใน Solidity
pragma solidity ^0.5.0;
contract SolidityTest {
constructor() public{
}
function getResult() public view returns(string memory){
uint a = 1;
uint b = 2;
uint result = a + b;
return integerToString(result);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);
}
}
รันโปรแกรมข้างต้นโดยใช้ขั้นตอนที่ให้ไว้ในบทSolidity First Application
เอาต์พุต
0: string: 3