在学习solidity的固定长度数组之前,首先需要明白的一点是,字节是用16进制表示的。
在16进制所表示的字节规则中,两个数字/字母占一个字节。
如 aa 所占的16进制字节数组长度为1。
b7ab 所占的16进制字节数组长度为2.
f9a8b7b9c521 所占的16进制字节数组长度为6.
变量类型的bytes1和bytes2等等是代表定义固定长度的字节数组。
其后面的数字代表了固定的长度,如bytes1
则代表固定的数组长度为1
,bytes10
则代表固定的数组长度为10
.
需要注意的是,在solidity中,在为其字节类型的变量赋值时,值前面必须要加上’0x
'才可以,否则编译失败。
而且,长度的计算标准,也是忽略了’0x’。
而string字符串等数据,可以转换为16进制(也就是字节)来进行变量值的赋值和定义。
而在智能合约中,经常会出现用字节数组代替字符串
去声明变量值的用法。
pragma solidity ^0.4.16;
contract bytesArray {
// 字节数组长度1,超过则报错 ‘aa'占长度1.
bytes1 public length1 = 0xaa; // (二进制)10101010 --> aa
//字节数组长度2,超过则报错 ‘b7ab'占长度2.
bytes2 public length2 = 0xb7ab;//(二进制) 1011011110101011 --> b7ab
//字节数组长度6,超过则报错 ‘f9a8b7b9c521'占长度6.
bytes6 public length6 = 0xf9a8b7b9c521;//(二进制) 111110011010100010110111101110011100010100100001 --> f9a8b7b9c521
//字节数组长度11,超过则报错 ’68656c6c6f20776f726c64‘占长度11
bytes11 public length10 = 0x68656c6c6f20776f726c64;// (字符串) hello world --> 68656c6c6f20776f726c64
}
附上两个页面:
1,在线进制转换:
https://tool.oschina.net/hexconvert
2,字符串与16进制转换:http://tools.bugscaner.com/text/zifuchuanzhuanhex.html