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)的更多相关文章

  1. solidity学习-cryptoPunks为实例

    在这里使用cryptoPunks为实例来进行solidity的介绍,一般这些内容理解了就能够进行相对简单的智能合约的编写了,同时会添加一些我认为也十分重要的内容学习文档为http://solidity ...

  2. solidity 学习笔记(7)内联汇编

    为什么要有内联汇编? //普通循环和内敛汇编循环比较 pragma solidity ^0.4.25; contract Assembly{ function nativeLoop() public ...

  3. solidity 学习笔记(6)call 函数

    call() 方法 call()是一个底层的接口,用来向一个合约发送消息,也就是说如果你想实现自己的消息传递,可以使用这个函数.函数支持传入任意类型的任意参数,并将参数打包成32字节,相互拼接后向合约 ...

  4. solidity 学习笔记(5)接口

    接口:不用实现方法,仅仅定义方法. pragma solidity ^; contract cat{ //cat实际上实现了接口animalEat,因为他们有相同的方法. string name; f ...

  5. solidity 学习笔记(3) 函数修饰符/继承

    修饰符: 函数修饰符有 constant  view pure 其中 constant和view的功能是一样的  不会消耗gas 也就是说不会做任何存储   constant在5.0以后的版本中被废弃 ...

  6. solidity 学习笔记 2 (二维数组)

    solidity 二维数组: pragma solidity ^0.4.23; contract twoArray{ uint[2][3] grade =[[20,30],[40,50],[45,60 ...

  7. solidity学习笔记

    一 pragam solidity ^0.4.23; contract helloword{ string public  name ="hello"; function getN ...

  8. 以太坊智能合约开发 Solidity学习

    1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...

  9. solidity 学习笔记(4)library库

    library库的申明: library SafeMath{ functrion mul(uint a,uint b) public returns (uint){ uint c= a*b; asse ...

  10. cryptopunks的代码解释

    1.imageHash就是将punk所有图像合在一起的那张图punks.png进行hash得到一个值,并将该值存储到链上,用处就是你可以通过将图像hash然后跟该值对比看图像对不对.这就是它的用处,在 ...

随机推荐

  1. Commons Daemon procrun stdout initialized

    参考 https://blog.csdn.net/qq_19865749/article/details/69664979 jvm路径错误

  2. java第八章JDBC

    JDBC实现各种数据库的访问 实现把各种数据存入数据库从而长久保存(JDBC充当了java应用程序于各种不同数据库之间进行对话的媒介) JDBC工作原理 JDBC API由Sun公司提供,主要包括Co ...

  3. HBase数据压缩算法编码探索

    摘要: 本文主要介绍了hbase对数据压缩,编码的支持,以及云hbase在社区基础上对数据压缩率和访问速度上了进行的改进. 前言 你可曾遇到这种需求,只有几百qps的冷数据缓存,却因为存储水位要浪费几 ...

  4. select2的设置选中

    select2插件设置选中值并显示的问题 在select2中,要想设置指定值为选中状态并显示: $("#select2_Id").val("XXXXX").se ...

  5. mysql学习3:mysql之my.cnf详解

    mysql之my.cnf详解 本文转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html 以下是 my.cnf 配置文件参数解释: #*** ...

  6. Python __dict__属性详解

    本文转载自 https://www.cnblogs.com/alvin2010/p/9102344.html 感谢 //偏执 大佬 我们都知道Python一切皆对象,那么Python究竟是怎么管理对象 ...

  7. 帆软报表(FineReport)实现跨数据源父子查询(2阶段查询)

    问题描述: 在报表中需要查询多个系统多个数据源,且有一个数据源的入参是另一个数据源的返回值.所以当用户点击查询到展现报表数据这个过程中,需要先做父查询,查询出的结果在作为子查询. 实现方案: 方案一: ...

  8. 纯css3单选框/复选框美化样式代码

    纯CSS 单/复选框 美化请选择iPhone 型号 iPhone 6s iPhone 6s Plus iPhone 7 iPhone 7 Plus   选择兴趣爱好 女 绘画 摄影 骑行   原理在这 ...

  9. angular2监听页面大小变化

    一.现象 全屏页面中的图表,在很多的时候需要 resize 一把,以适应页面的大小变化 二.解决 1.引入 : import { Observable } from 'rxjs'; 2.使用(在ngO ...

  10. Oracle通过SCN做增量备份修复DG

    DG由于网络原因或者bug原因经常不同步,有时隔得时间久了,就会丢失归档日志,或者长时间的归档恢复较慢,有一种可以基于scn的方式来恢复DG库,使用基于scn的增量备份来恢复standby库可以节省大 ...