区块链——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智能合约基础实战(六)

可知在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;

    }

运行结果如下:

区块链——Solidity智能合约基础实战(六)

表示字节长度为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;

    }

运行结果如下:

区块链——Solidity智能合约基础实战(六)

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;

    }

运行结果如下:

  1. 调用compare方法:区块链——Solidity智能合约基础实战(六)
  2. 调用compare2方法:

区块链——Solidity智能合约基础实战(六)

  1. 调用compare3方法:

区块链——Solidity智能合约基础实战(六)

  1. 调用compare4方法:

区块链——Solidity智能合约基础实战(六)

  1. 调用compare5方法:

区块链——Solidity智能合约基础实战(六)

  1. 调用compare方法:区块链——Solidity智能合约基础实战(六)

在内存中理解上述结果

操作数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;

    }

编译结果:

区块链——Solidity智能合约基础实战(六)

结果正确,理论与实践一致;

    补充:修改变量值内容

function changeContent() public{

        num1 = 2;

    }

注意:不是num1[0]=2!