区块链——Solidity智能合约基础实战(六)
区块链——Solidity智能合约基础实战(六)
固定长度字节数组
由于位是计算机内最小的储存单元,字节是对位的封装,一个字节为8位
在固定长度字节数组中,关键字有:bytes1,bytes2,bytes3,…,bytes32(以步长1递增)
Bytes在内存中和nint本质一样,bytes32=unit256
byte代表的是bytes1
代码段1:
contract ByteArray{
bytes1 public num1 = 0x7a;//0111 1010 bytes2 public num2 = 0x7a68;//0111 1010 0110 1000 bytes12 public num3=0x7a6856e68a69616e78756e;
} |
上述运行结果如下:
可知在solidity中,如果在关键字前面加上public,就会自动生成get方法,无需手动编写。
代码段2:
bytes1 public num1 = 0x7a;//0111 1010 bytes2 public num2 = 0x7a68;//0111 1010 0110 1000 bytes12 public num3=0x7a6856e68a69616e78756e; function getLength() returns(uint){ return num1.length; } |
运行结果如下:
表示字节长度为1
代码段3:
bytes1 public num1 = 0x7a;//0111 1010 bytes2 public num2 = 0x7a68;//0111 1010 0110 1000 bytes12 public num3=0x7a6856e68a69616e78756e; function getLength() returns(uint){ return num3.length; } |
运行结果如下:
Bytes的属性变量长度不能修改
function setLength() returns(uint){ num1.length = 18; return num1.length; } |
代码段4:
bytes1 public a = 0x7a; //0111 1010
bytes1 public b = 0x68; //0110 1000
function compare() returns(bool){ return a > b; } function compare2() returns(bool){ return a >= b; } function compare3() returns(bool){ return a < b; } function compare4() returns(bool){ return a <= b; } function compare5() returns(bool){ return a == b; } |
运行结果如下:
- 调用compare方法:
- 调用compare2方法:
- 调用compare3方法:
- 调用compare4方法:
- 调用compare5方法:
- 调用compare方法:
在内存中理解上述结果
操作数1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
|
操作数2 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
运算结果 |
& |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0x68 |
| |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0x7a |
~ |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0x85 |
^ |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0x12 |
<< |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0xf4 |
>> |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0x3d |
将Math.sol中的代码移植过来,并将返回值改为Bytes1,如下:
function logicaland() view public returns(bytes1){ return a & b; }
function logicalor() view public returns(bytes1){ return a | b; }
function logicalinvert() view public returns(bytes1){ return ~a; } function logicaloxor() view public returns(bytes1){ return a^b; } function logicalmoveLeft() view public returns(bytes1){ return a<<1; } function logicalmoveRight() view public returns(bytes1){ return a>>1; } |
编译结果:
结果正确,理论与实践一致;
补充:修改变量值内容
function changeContent() public{ num1 = 2; } |
注意:不是num1[0]=2!