Solidity 字符串
Solidity 中,字符串值使用双引号(“)和单引号(‘)包括,字符串类型用 string 表示。字符串是特殊的数组,是引用类型。
// SPDX-License-Identifier: SimPL-3.0 pragma solidity ^0.7.0; contract SolidityTest { string data = "test"; }
在上面的例子中,"test" 是一个字符串,data 是一个字符串变量。
Solidity 提供字节与字符串之间的内置转换,可以将字符串赋给 bytes 类型变量。
// SPDX-License-Identifier: SimPL-3.0 pragma solidity ^0.7.0; contract SolidityTest { bytes data = "test"; }
1. 转义字符
Solidity 字符串类型支持的转义字符,如下表所示:
序号 | 转义字符 |
---|---|
1 | \n 开始新的一行 |
2 | \\ 反斜杠 |
3 | \’ 单引号 |
4 | \” 双引号 |
5 | \b 退格 |
6 | \f 换页 |
7 | \r 回车 |
8 | \t 制表符 |
9 | \v 垂直制表符 |
10 | \xNN 表示十六进制值并插入适当的字节。 |
11 | \uNNNN 表示Unicode值并插入UTF-8序列。 |
2. bytes到字符串的转换
可以使用 string() 构造函数将 bytes 转换为字符串。
bytes memory bstr = new bytes(10); string message = string(bstr);
示例
bytes 到字符串的转换:
// SPDX-License-Identifier: SimPL-3.0 pragma solidity ^0.7.0; contract SolidityTest { constructor(){ } function getResult() public pure 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); } }
运行上述程序,输出结果:
0: string: 3
3. bytes到字符串的转换
可以使用bytes()构造函数将字符串转换为bytes。
示例
字符串到bytes的转换:
// SPDX-License-Identifier: SimPL-3.0 pragma solidity ^0.7.0; contract SolidityTest { constructor(){ } function getResult(string memory s) public pure returns(bytes memory){ return bytes(s); // 字符串转换到bytes } }
数组是一种数据结构,它是存储同类元素的有序集合。数组中的特定元素由索引访问,索引值从 0 开始。例如,声明一个数组变量,如 numbers,可以使用 numbers[0]、numbers[1] 表示单个变量。数组大小 ...