智能合约中判读字符串相等


Solidity中很多方法都很底层,比如开发中很常见的迭代和判断字符串相等的方法都没有,必须要自己写个方法来实现。可能已有些库已实现类似的方法,不过总归是要麻烦不少。相比起来,JavaScript自己就带了很多原生的方法,用起来也很顺手。

判读字符串相等不能直接使用==这样的方法,我也搞不清为什么,很多语言都是直接支持的,只有Solidity不支持。没办法,只能自己设计个方法来实现。

function compareStr (string _str1, string _str2) public returns(bool) {
    if(keccak256(abi.encodePacked(_str1)) == keccak256(abi.encodePacked(_str2))) {
        // 如果二者相等,使checkResult为true
        checkResult = true;
    }else {
        checkResult = false;
    }
    // 返回checkResult
    return checkResult;
}

对两个字符串进行哈希运算,结果一致就证明两个字符串相等。这个哈希运算有点费时,可以在这之前做个长度判断以节约点时间,达到一个平衡。改进后的方法:

function compareStr (string _str1, string _str2) public returns(bool) {
  if(bytes(_str1).length == bytes(_str2).length){
    if(keccak256(abi.encodePacked(_str1)) == keccak256(abi.encodePacked(_str2))) {
        retrun true;
    }
  }
   return false;
}

如果是频繁地运用这个方法,或者是对很多的字符串组进行比较,则改进后的方法会优良不少。

本文链接地址:https://www.wwsww.cn/jishu/6528.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。