Solidity - 字串



Solidity 使用雙引號 (") 和單引號 (') 都支援字串字面量。它提供字串作為資料型別來宣告字串型別的變數。

pragma solidity ^0.5.0;

contract SolidityTest {
   string data = "test";
}

在上面的示例中,“test” 是一個字串字面量,data 是一個字串變數。更推薦的方式是使用位元組型別而不是字串,因為字串操作與位元組操作相比需要更多的 gas。Solidity 提供了位元組到字串以及反向的內建轉換。在 Solidity 中,我們可以輕鬆地將字串字面量分配給 byte32 型別的變數。Solidity 將其視為一個 byte32 字面量。

pragma solidity ^0.5.0;

contract SolidityTest {
   bytes32 data = "test";
}

跳脫字元

序號 字元 & 描述
1

\n

換行。

2

\\

反斜槓

3

\'

單引號

4

\"

雙引號

5

\b

退格

6

\f

換頁

7

\r

回車

8

\t

製表符

9

\v

垂直製表符

10

\xNN

表示十六進位制值並插入相應的位元組。

11

\uNNNN

表示 Unicode 值並插入 UTF-8 序列。

位元組到字串轉換

可以使用 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 第一個應用章節中提供的步驟執行上述程式。

輸出

0: string: 3
廣告

© . All rights reserved.