Solidity - 字符串
Solidity 支持使用双引号 (") 和单引号 (') 的字符串文字。它提供字符串作为数据类型来声明 String 类型的变量。
pragma solidity ^0.5.0; contract SolidityTest { string data = "test"; }
在上面的示例中,"test"是一个字符串文字,而 data 是一个字符串变量。 更优选的方法是使用字节类型而不是字符串,因为与字节操作相比,字符串操作需要更多的气体。 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 First 应用 章节中提供的步骤运行上述程序。
输出
0: string: 3