【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];
}
}
可变长的的二位数组可以改变数组长度和每行中列的个数
字面量
最小匹配原则
可以强制类型转化
【Solidity】学习(1)的更多相关文章
- solidity学习-cryptoPunks为实例
在这里使用cryptoPunks为实例来进行solidity的介绍,一般这些内容理解了就能够进行相对简单的智能合约的编写了,同时会添加一些我认为也十分重要的内容学习文档为http://solidity ...
- solidity 学习笔记(7)内联汇编
为什么要有内联汇编? //普通循环和内敛汇编循环比较 pragma solidity ^0.4.25; contract Assembly{ function nativeLoop() public ...
- solidity 学习笔记(6)call 函数
call() 方法 call()是一个底层的接口,用来向一个合约发送消息,也就是说如果你想实现自己的消息传递,可以使用这个函数.函数支持传入任意类型的任意参数,并将参数打包成32字节,相互拼接后向合约 ...
- solidity 学习笔记(5)接口
接口:不用实现方法,仅仅定义方法. pragma solidity ^; contract cat{ //cat实际上实现了接口animalEat,因为他们有相同的方法. string name; f ...
- solidity 学习笔记(3) 函数修饰符/继承
修饰符: 函数修饰符有 constant view pure 其中 constant和view的功能是一样的 不会消耗gas 也就是说不会做任何存储 constant在5.0以后的版本中被废弃 ...
- solidity 学习笔记 2 (二维数组)
solidity 二维数组: pragma solidity ^0.4.23; contract twoArray{ uint[2][3] grade =[[20,30],[40,50],[45,60 ...
- solidity学习笔记
一 pragam solidity ^0.4.23; contract helloword{ string public name ="hello"; function getN ...
- 以太坊智能合约开发 Solidity学习
1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...
- solidity 学习笔记(4)library库
library库的申明: library SafeMath{ functrion mul(uint a,uint b) public returns (uint){ uint c= a*b; asse ...
- cryptopunks的代码解释
1.imageHash就是将punk所有图像合在一起的那张图punks.png进行hash得到一个值,并将该值存储到链上,用处就是你可以通过将图像hash然后跟该值对比看图像对不对.这就是它的用处,在 ...
随机推荐
- d3.js svg中 g 标签问题一览
svg 中的g标签, 算是比较特殊 1 没有x y属性 2 没有width height 属性 3 不能fill 4 .... g标签基本只管分组问题, 其他功能一概不提供 要解决这些问题, 直接在g ...
- Harry Potter and J.K.Rowling(半平面交+圆和矩形交)
Harry Potter and J.K.Rowling http://acm.hdu.edu.cn/showproblem.php?pid=3982 Time Limit: 2000/1000 MS ...
- 【python路飞】编码 ascii码(256位 =1个字节)美国;unicode(万国码)中文 一共9万个 用4个字节表示这9万个子 17位就能表示
8位一个字节 1024字节 1KB 1024KB 1MB ASCII码不能包含中文.创建了unicode,一个中文4个字节.UTF-8一个中文3个.GBK中国人用的只包含中文2个字节 升级 Un ...
- logistics回归理解
多元回归方程:假设有一个因变量y和一组自变量x1, x2, x3, ... , xn,其中y为连续变量,我们可以拟合一个线性方程: y =β0 +β1*x1 +β2*x2 +β3*x3 +...+βn ...
- Quartz.Net进阶之五:TriggerListener 、JobListener 和 SchedulerListener
一.介绍 今天开始学习监听器,就是 Listener,在Quartz.Net 中,主要包含3类的监听器,主要内容包括:TriggerListener .JobListener 和 SchedulerL ...
- Devexpress使用之:GridControl控件
Devexpress使用之:GridControl控件 Devexpress系列控件功能很强大,使用起来也不太容易,我也是边摸索边使用,如果有时间我会把常用控件的使用方法整理出来的. using Sy ...
- boost Asio网络编程简介
:first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...
- return this 和return * this
this是指向自身对象的指针,*this是自身对象. 也就是说return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 ). retu ...
- 分析easyswoole3.0源码,服务启动为例(二)
以下内容需要结合es的源码,不然可能会觉得跳跃.先描述下es启动的大致流程.es启动的时候注册异常处理函数以及加载配置文件.根据位置文件的设置选择启动哪种swoole服务.然后用一个事件注册类,注册s ...
- linux学习第十九天 (Linux就该这么学) 结课了
今天最后一天课程了,结课了,还有点舍不得那,在些也祝 李老师 事业蒸蒸日上,超来超好, 今天内容是部署了 LNMP 部署动态网站环境(linux +nginx+mysql+php) 安装文件挺别多, ...