【String】
在 Solidity 中和 python 一樣可以使用雙引號 "" 或者單引號 '' 來表示字串。也同樣可以用反斜槓來代表跳脫字元 "\"。
理想的情況下我們在宣告字串的時候可以使用 bytes 或者 uint<bytes> 來節省更多的 gas:
pragma solidity ^0.8.11;
contract SolidityTest {
string data_moreGas = "test";
bytes32 data_lessGas = "test";
}常見用法
String 沒辦法直接比較,所以字串比較要用 keccak256 和 abi.encodePacked。
pragma solidity ^0.8.11;
contract String {
function compare(string memory _name) public view returns(bool){
if (keccak256(abi.encodePacked(_name)) == keccak256(abi.encodePacked("Vitalik"))){
return true;
}
else{
return false;
}
}
}把兩個 String 連接起來:
pragma solidity ^0.8.11;
contract SolidityTest {
function concat(string memory a, string memory b) public view returns(string memory){
return string(abi.encodePacked(a, b));
}
}調用一個字串的長度可以使用以下方法:
pragma solidity ^0.8.11;
contract String {
function len(string memory _name) public view returns(uint){
return bytes(_name).length;
}
}String 如何在 Solidity 運作是一個非常深奧的事情,從 bytes 到 string 不僅僅只是 string() 這樣 casting 這麼簡單,之後我們在加密函數的時候再來詳述這個過程!
String vs. Bytes
兩者都屬於特殊的陣列型態
String 某種程度上等於Bytes,但不具有長度和陣列取值的運算子(
[])String 較為昂貴
Last updated
Was this helpful?