【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]; } }
可变长的的二位数组可以改变数组长度和每行中列的个数
字面量
最小匹配原则
可以强制类型转化