zoukankan      html  css  js  c++  java
  • solidity如何拼接字符串?

      当你开始学习使用solidity开发以太坊智能合约之后,很快你会碰到一个问题:

    一.在solidity中该如何拼接字符串?

      可能你已经试过了,下面的代码试图把两个字符串使用相加的运算符连接起来,但是这行不通:

    var str = 'asdf'
    var b = str + 'sdf'

      实际上,根据solidity的官方文档,目前在solidity中,需要我们自己来实现字符串拼接功能。

    二.拼接字符串实现代码
      例如,下面的代码实现两个字符串的拼接,基本 上是利用bytes和string之间的类型转换来实现字符串拼接:

    contract EzDemo {
        function strConcat(string _a, string _b) internal returns (string){
            bytes memory _ba = bytes(_a);
            bytes memory _bb = bytes(_b);
            string memory ret = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
            bytes memory bret = bytes(ret);
            uint k = 0;
            for (uint i = 0; i < _ba.length; i++)bret[k++] = _ba[i];
            for (i = 0; i < _bb.length; i++) bret[k++] = _bb[i];
            return string(ret);
       }  
    }

      上面的代码很容易扩展到拼接多个字符串。

            注意:如果长度计算比实际的少,可能会出现“new BigNumber() not a base 16 number: " error occurs when not refreshing without the cache”异常。

    三.使用第三方库
      不过好在有人写了一个库(可能有BUG,现在已被删除),可以让我们省些力气:

    import "github.com/Arachnid/solidity-stringutils/strings.sol";
    
    contract C {
        using strings for *;
        string public s;
    
        function foo(string s1, string s2) {
            s = s1.toSlice().concat(s2.toSlice());
        }
    }

    文章来源:https://my.oschina.net/u/3794778/blog/1800631

  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/flyingeagle/p/10081227.html
Copyright © 2011-2022 走看看