【solidity基础】 固定长度字节数组

在学习solidity的固定长度数组之前,首先需要明白的一点是,字节是用16进制表示的

在16进制所表示的字节规则中,两个数字/字母占一个字节。
如 aa 所占的16进制字节数组长度为1。
b7ab 所占的16进制字节数组长度为2.
f9a8b7b9c521 所占的16进制字节数组长度为6.

变量类型的bytes1和bytes2等等是代表定义固定长度的字节数组。
其后面的数字代表了固定的长度,如bytes1则代表固定的数组长度为1bytes10则代表固定的数组长度为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

猜你喜欢

转载自blog.csdn.net/chinatopno1/article/details/123173014