zoukankan      html  css  js  c++  java
  • 【Solidity】学习(1)

    string

    string类型不可以直接通过length读取字符串长度,也不可以直接通过下标直接访问数据元素

    使用的方法是:强制类型转换为bytes

    其中," " 和‘ ’都可以表示

    pragma solidity ^0.4.0;
    
    contract first{
        string public str = 'hello world';
        function getstr() returns(uint){
            return bytes(str).length;
        }
        function changestr() {
            bytes(str)[0]='b';
        }
    }
    

    string类型,特殊字和英文字符数字字母占一个字节,中文汉字和中文字符占3个字节

    pragma solidity ^0.4.0;
    
    contract first{
        string public strCN ="你好,世界";    //中文标点,逗号
        string public strSY = "%$#@!";
        string public strCNSY = ",。";    //中文标点,逗号和句号
        string public str = 'hello world';
        function getstr() view returns(uint){
            return bytes(str).length;  
        }
        function getstr1() view returns(uint){
            return bytes(strCN).length;
        }
        function getstr2() view returns(uint){
            return bytes(strCNSY).length;
        }
    }

    结果为

     bytes数组转化为string,强制类型转化

    pragma solidity ^0.4.0;
    
    contract BytesToString{
        bytes public byt = new bytes(2);
        function Init(){
            byt[0] = 0x7a;
            byt[1] = 0x68; 
        }
        function bytesToString()view returns(string){
            return string(byt);
        }
    }

    数组

    固定长度数组

    从前到后截断,在末尾补充0

    pragma solidity ^0.4.0;
    
    contract first{
        bytes6 public a = 0x1929192031;
        function getbyte1() view returns(bytes1){
            return bytes1(a);
        }
        function getbyte4()view returns(bytes4){
            return bytes4(a);
        }
        function getbyte18()view returns(bytes12){
            return bytes12(a);
        }
    }

    可变长度数组

    bytes a = new bytes(2);

     将固定长度数组赋值给可变长度数组

    pragma solidity ^0.4.0;
    
    contract first{
        bytes6 public str = 0x1929192031;
        function getNewStr()view returns(bytes){
            // 函数内部加上 memory
            bytes memory newstr = new bytes(str.length);
            //length为uint类型,因此i要写成uint
            for(uint i = 0; i < str.length; ++i){
                newstr[i] = str[i];
            }
            return newstr;
        }
    }

    固定数组

    uint [5] arr = [1,2,3,4,5];
    //是中括号不是大括号
    • 可以直接获取数组长度,但是不可以修改length,不可以push()

    非固定数组

    • 可以直接获取数组长度
    • 可以修改length,补0或者截断
    • 可以push

    二维数组

    solidity语言二维数组不同于c,java

    pragma solidity ^0.4.0;
    
    contract BytesToString{
        //定义时候arr[i][j]表示一共j个元素,每个元素有i项
        uint[2][3] arr= [[11,22],[33,44],[55,66]];
        function sumGrade()view returns(uint){
        //调用时候,arr[i][j]表示第i+1行,j+1列的元素
            return arr[2][1];
        }
    }

    可变长的的二位数组可以改变数组长度和每行中列的个数

    字面量

    最小匹配原则

    可以强制类型转化

     

  • 相关阅读:
    ssh加密访问
    protobuf java学习
    Errors occurred while updating the change sets for SVNStatusSubscriber org.apache.subversion.javahl.
    eclipse导入svn中的maven工程项目
    Archive for required library xx cannot be read or is not a valid ZIP file
    oracle9i 精简版客户端界面没有显示实例名
    mybatis3 sqlsession
    RabbitMQ学习之:(一)初识、概念及心得
    mybatis expected at least 1 bean which qualifies as autowire candidate for this dependency
    mysql 5.6.20 数据库中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/lhw-/p/10638729.html
Copyright © 2011-2022 走看看