【Solidity入门系列】定长字节数组

定义的方式是bytesN,其中N可取从132中的任意整数值[^origin]。默认的byte表示的是bytes1

使用指定长度的命名方式bytes,不是byte,多一个s,不然编译报错Error: Identifier not found or not unique

其它编程语言一般没有这样的类型。可取值范围,增长步长方面与Solidity语言自身的整数有不同[^integer],需注意区分。

文中代码均可通过在线Solidity浏览器编译器[^remix] 跑通,如你想验证你的想法,可随时输入代码验证,后文中不再一一说明[^base]。

定义新变量

pragma solidity ^0.4.0;

contract FixedArrayTest {
    function arrayDefine() returns(bytes1, bytes2, bytes2){
        bytes1 a = 255;
        bytes2 b = "aA";
        
        uint8 i = 10;
        bytes2 c = (bytes2)(i);
       
        return (a, b, c);
    }
}

从上面的例子来看,定义新变量时可以使用整数字面量,或字符串字面量。

运算符

支持的比较运算符有<=<==!=>=>,返回的结果是一个bool

pragma solidity ^0.4.0;


contract FixedArrayTest {
    function arrayCompare() returns(bool, bool){
       
       bytes1 a = "a";
       bytes1 b = "b";
       
       bytes1 c = 97;
       
       bool r1 = a < b;//true
       bool r2 = a == c;//true
        
        
        return (r1, r2);
    }
}

定长字节数组也支持位运算符&|^~,以及<<(左移位)<<(右移位)

pragma solidity ^0.4.0;


contract FixedArrayTest {
    function arrayShift() returns(bytes2, bytes2, bytes2){
        bytes2 a = 257;
        
        bytes2 b = a << 1;
        bytes2 c = a << 2;
        
       //0x0101 0x0202 0x0404
        return (a, b, c);
    }
}

移位操作符的右值必须为整数,但不能为负数,否则会报异常VM Exception: invalid opcode

移位的结果类型与操作符左值类型一致,操作符返回结果是移位后的值,移位不影响原值。

使用序号访问定长字节数组

我们还可以使用序号来访问定长字节数组的某个字节;如果数组定义的长度为N,那序号可取值是[0,N),与其它语言类似。

pragma solidity ^0.4.0;


contract FixedArrayTest {
    function arrayIndex() returns(byte, byte, byte, byte, byte){
       bytes1 a = 255;
       //a[0] 0xff 表示值255
       
       bytes2 b = 256;
       //b[0] 0x00 二进制表示时的底位
       //b[1] 0x01 二进制表示时的高位
       
       bytes2 c = "aA";
        //c[0] 0x61 字母a的ascii。
        //c[1] 0x41 字母A的ascii。
        
        
        return (a[0],b[0], b[1], c[0], c[1]);
    }
}

序号不能超过定义长度,否则编译将不能通过,Error: Out of bounds array access.

长度

定长字节数组提供了一个只读属性.length来查看其长度。

pragma solidity ^0.4.0;


contract FixedArrayTest {
    function arrayLength() returns(uint8){
        
        bytes3 a = 257;

        return a.length;
    }
}

.length的返回值类型是uint8

[1]: 原英文文档地址 访问中文文档地址 -> http://solidity.tryblockchain.org/Solidity-Type-ByteArrays-%E5%AD%97%E8%8A%82%E6%95%B0%E7%BB%84.html

[2]: 深入浅出Solidity之一整数

[3]: 在线浏览器编译器: https://ethereum.github.io/browser-solidity/

[4]: 基本使用可参见:Solidity是什么?

作者介绍:专注基于以太坊的相关区块链技术,了解以太坊,Solidity,Truffle。博客:http://me.tryblockchain.org

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,934评论 6 13
  • 三,字符串扩展 3.1 Unicode表示法 ES6 做出了改进,只要将码点放入大括号,就能正确解读该字符。有了这...
    eastbaby阅读 1,521评论 0 8
  • 某段时间《湄公河行动》热映之后,给闺密发微信就被规定字数不能超过三个,因为会挡住新晋“老公”彭于晏的颜和美好肉体。...
    饭小艺阅读 553评论 0 4
  • 01. 柴静在自传体《看见》的开头便写到: “要想‘看见’,就要从愚昧中睁开眼来”。 所以她深入...
    YoLoYi阅读 342评论 0 0
  • step1 获取一个相机实例 step2 检测设备是否存在相机 step2 创建一个SurfacceView用于显...
    金馆长说阅读 286评论 0 1