• 【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];
        }
    }

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

    字面量

    最小匹配原则

    可以强制类型转化

     

  • 相关阅读:
    windows server 2008 r2 切换windows 7主题方法
    JAVA环境安装
    Oracle 11gR2 安装教学
    webmin-1.810 安装
    Windows Squid 安装配置
    Zyxel Switch-How to block a fake DHCP server without enabling DHCP snooping?
    Java介绍
    cookies和session区别
    牛刀小试之Django二
    小试牛刀之Django
  • 原文地址:https://www.cnblogs.com/lhw-/p/10638729.html
Copyright © 2020-2023  润新知