【String】

在 Solidity 中和 python 一樣可以使用雙引號 "" 或者單引號 '' 來表示字串。也同樣可以用反斜槓來代表跳脫字元 "\"

理想的情況下我們在宣告字串的時候可以使用 bytes 或者 uint<bytes> 來節省更多的 gas

pragma solidity ^0.8.11;

contract SolidityTest {
    string data_moreGas = "test";
   bytes32 data_lessGas = "test";
}

常見用法

String 沒辦法直接比較,所以字串比較要用 keccak256abi.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 運作是一個非常深奧的事情,從 bytesstring 不僅僅只是 string() 這樣 casting 這麼簡單,之後我們在加密函數的時候再來詳述這個過程!

String vs. Bytes

  1. 兩者都屬於特殊的陣列型態

  2. String 某種程度上等於Bytes,但不具有長度和陣列取值的運算子([]

  3. String 較為昂貴

Last updated

Was this helpful?