字符串的定义使用单引号或双引号都可以。这里主要说一下有关string的常见操作,在solidity中不是很方便。
1 | pragma solidity >=0.4.0 <0.6.0; |
###长度
字符串长度的获取需要将string转换成bytes,然后使用bytes的length属性获取长度。
###拼接
- 字符串拼接,官网上给出的方法是使用abi.encodePacked方法
- 也可以自己写一个方法,思路就是把string转换成bytes,然后将bytes合并成一个大的bytes,最后再将结果bytes转换成string。其中bytes与string转换方法为bytes(string),string(bytes),这里就不写代码了。
- 网上有人使用git上的一个工具包,不过我自己编译一直通不过,后续再查下原因。浏览了下代码,可以学习下。
###比较
Solidity同样不支持字符串的比较,需要自己实现,这里提供两种方式(这里不包含其他的工具包方式),当然出于性能要求以及gas消耗情况,可以首先对字符串的长度进行比较,然后再比较内容。这个文章写的不错,而且有gas消耗测试统计。 - 比较两字字符串的hash是否相等
- 逐个比较每个字符
###int转换
Solidity同样不支持string与int的互相转换。这里可以直接查看工具类oraclize。其转换思路就是把string首先转换成bytes类型,然后逐个遍历,进行数值累加。