博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
『0013』 - Solidity Types - 固定大小字节数组(Fixed-size byte arrays)
阅读量:6886 次
发布时间:2019-06-27

本文共 2382 字,大约阅读时间需要 7 分钟。

作者:黎跃春,区块链、高可用架构工程师

微信:liyc1215 QQ群:348924182 博客:

固定大小字节数组(Fixed-size byte arrays)

固定大小字节数组可以通过 bytes1, bytes2, bytes3, ..., bytes32来进行声明。PS:byte的别名就是 byte1

  • bytes1只能存储一个字节,也就是二进制8位的内容。
  • bytes2只能存储两个字节,也就是二进制16位的内容。
  • bytes3只能存储三个字节,也就是二进制24位的内容。
  • ......
  • bytes32能存储三十二个字节,也就是二进制32 * 8 = 256 位的内容。
pragma solidity ^0.4.4;contract C {        // 0x6c697975656368756e        byte public a = 0x6c; // 0110 1100    bytes1 public b = 0x6c; // 0110 1100    bytes2 public c = 0x6c69; // 0110 1100 0110 1001    bytes3 public d = 0x6c6979; // 0110 1100 0110 1001 0111 1001    bytes4 public e = 0x6c697975; // 0110 1100 0110 1001 0111 1001 0111 0101        // ...        bytes8 public f = 0x6c69797565636875; // 0110 1100 0110 1001 0111 1001 0111 0101 0110 0101 0110 0011 0110 1000 0111 0101    bytes9 public g = 0x6c697975656368756e; // // 0110 1100 0110 1001 0111 1001 0111 0101 0110 0101 0110 0011 0110 1000 0111 0101 0110 1110    }

Fixed-size byte arrays

说明

0x 6c 69 79 75 65 63 68 75 6e是一个十六进制的整数,它的二进制码是0b 0110 1100 0110 1001 0111 1001 0111 0101 0110 0101 0110 0011 0110 1000 0111 0101 0110 1110,在计算机中0b 0110 1100 0110 1001 0111 1001 0111 0101 0110 0101 0110 0011 0110 1000 0111 0101 0110 1110二进制码存储的内容其实就是liyuechun我名字的全拼。我们都知道,在计算机中,所以的内容,不管是图片、文字、视频,任何资料我们都可以转换成二进制码在计算机中进行存储。

在计算机中,一个字母或者一个数字的存储空间为一个字节,也就是8位二进制位。一个汉字两个字节,也就是16位

0x6c697975656368756e中,0x6c是一个字节,因为16进制中,一个数字等价于二进制中的4位,两个数字等价于8位,刚好一个字节,0x6c用二进制来表示是0b 0110 11000x6c对应的内容为l,而0x6c69对应的内容为li,以此内推0x6c697975656368756e对应的内容为liyuechun

PS:

bytebytes1等价,只能存储一个字节,当超过它的存储范围时就会报错,如下图所示:

操作运算符

  • 比较运算符:<=, <, ==, !=, >=, >
  • 位操作符:&, |, ^(异或), ~ (取反), << (左移), >> (右移)
  • 索引访问:如果x是一个bytesI,那么可以通过x[k](0 < k < I)获取对应索引的字节,PS:x[k]是只读,不可写。

成员函数

  • .length 返回字节的个数。(只读)
pragma solidity ^0.4.4;contract C {        bytes9 public g = 0x6c697975656368756e;        function gByteLength() constant returns (uint) {                return g.length;    }    }

不可变深度解析

长度不可变

pragma solidity ^0.4.4;contract C {            bytes9  name = 0x6c697975656368756e;        function setNameLength(uint length) {            // 报错        name.length = length;    }    }

内部字节不可修改

pragma solidity ^0.4.4;contract C {            bytes9  name = 0x6c697975656368756e;        function setNameFirstByte(byte b) {                name[0] = b;    }    }

总结

bytesI(1 <= I <= 32)可以声明固定字节大小的字节数组变量,一旦声明,内部的字节和字节数组长度不可修改,当然可以通过索引读取(只读)对应索引的字节,或者通过length读取字节数组的字节数。

技术交流

  • 区块链技术交流QQ群:348924182
  • 「区块链部落」官方公众号

转载地址:http://faabl.baihongyu.com/

你可能感兴趣的文章
MongoDB集群搭建教程收集(待实践)
查看>>
windows系统下Python环境的搭建
查看>>
使用路由延迟加载 Angular 模块
查看>>
72. js EXTJS grid renderer用法
查看>>
Java集合迭代器 Iterator分析
查看>>
mvc area出现“找到多个与名为“Home”的控制器匹配的类型”错误的解决方法
查看>>
日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)
查看>>
使用IDEA搭建spring
查看>>
Vue入门系列(四)之Vue事件处理
查看>>
cacti监控linux和windows磁盘IO
查看>>
java将一个List赋值给另一个List的4种方法
查看>>
NET全控件
查看>>
Wireshark安装使用及报文分析(图文详解)
查看>>
CSharpGL(46)用Billboard绘制头顶文字
查看>>
Qml应用程序的性能考虑与建议
查看>>
Java多线程基础总结
查看>>
http://blog.csdn.net/zh521zh/article/details/52687922
查看>>
Ecto 总结
查看>>
SpringBoot注解大全(转)
查看>>
微服务实践(七):从单体式架构迁移到微服务架构
查看>>