本文共 2382 字,大约阅读时间需要 7 分钟。
作者:黎跃春,区块链、高可用架构工程师
微信:liyc1215 QQ群:348924182 博客:
固定大小字节数组可以通过 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 }
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 1100
,0x6c
对应的内容为l
,而0x6c69
对应的内容为li
,以此内推0x6c697975656368756e
对应的内容为liyuechun
。
PS:
byte
和bytes1
等价,只能存储一个字节,当超过它的存储范围时就会报错,如下图所示:
<=
, <
, ==
, !=
, >=
, >
&
, |
, ^(异或)
, ~ (取反)
, << (左移)
, >> (右移)
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
读取字节数组的字节数。
转载地址:http://faabl.baihongyu.com/