链眼社区:专注于区块链安全,区块链数据分析, 区块链信息整合,区块链技术服务和区块链技术咨询。

solidity智能合约字节数组与运算
chaineye
2021-07-28 23:54:41

byte类型

有byte bytes1 bytes2 … bytes32
特殊的有byte == bytes1

后面的数字代表占了多少字节。1个字节在内存中占了8位

性质

固定字节数组不能修改长度和内容

字节一般用16进制来存储

16进制中的1个数字代表占了4位。


1
2
3
4
5
6
7
bytes1 public num1 = 0x6a;        //转换为10进制:106
bytes2 public num2 = 0x6a6f;     //转换为10进制:27247

bytes6 public num3 = 0x6a6f6e736f6e;

bytes1 public a = 0x6a;//转换为2进制:0110   1010    
bytes1 public b = 0x6f;//转换为2进制:0110   1111


字节可以有长度属性


1
2
3
function getlength() view public returns(uint,uint,uint){
   return (num1.length,num2.length,num3.length);
}


字节可以比较大小

不同类型的字节也可以比较大小


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function  test1()  public view returns(bool){
   return  a>b;
}

function  test2() public view returns(bool){
   return  a>=b;
}

function  test3()  public  view returns(bool){
   return  a<b;
}
   function  test4() public   view returns(bool){
   return  a<=b;
}

function  test5() public view returns(bool){
   return  a==b;
}

   function  test6() public view returns(bool){
   return  a!=b;
}

function  test7() public view returns(bool){
   return num2 >num1;
}


字节可以进行位运算


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 0110 1010
// 0110 1111

//&0110 1010   106    0x6a
//|0110 1111   111    0x6f
//^0000 0101   5      0x05
//~1001 0101   149    0x95
//<1101 0100   212    0xd4
//>0011 0101   53     0x35
function  weiTest1() public view returns(bytes1){
   return a & b;
}
  function  weiTest2() public view returns(bytes1){
   return a | b;
}
  function  weiTest3() public view returns(bytes1){
   return a ^ b;
}
  function  weiTest4() public view returns(bytes1){
   return ~a;
}

  function  weiTest5() public view returns(bytes1){
   return a<<1;
}
  function  weiTest6() public view returns(bytes1){
   return a >>1;
}


完整代码


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
pragma solidity ^0.4.23;


contract  bytesTest{
   //0x6a6f6e736f6e
   bytes1 public num1 = 0x6a;        //106
   bytes2 public num2 = 0x6a6f;     //27247

   bytes6 public num3 = 0x6a6f6e736f6e;

    bytes1 public a = 0x6a;//0110   1010      106
    bytes1 public b = 0x6f;//0110   1111      111



   function getlength() view public returns(uint,uint,uint){
       return (num1.length,num2.length,num3.length);
   }

   // function changeLength()  public {
   //     num1.length = 9;
   // }

   function  test1()  public view returns(bool){
       return  a>b;
   }

    function  test2() public view returns(bool){
       return  a>=b;
   }

    function  test3()  public  view returns(bool){
       return  a<b;
   }
       function  test4() public   view returns(bool){
       return  a<=b;
   }

   function  test5() public view returns(bool){
       return  a==b;
   }

       function  test6() public view returns(bool){
       return  a!=b;
   }

    function  test7() public view returns(bool){
       return num2 >num1;
   }


   // 0110 1010
   // 0110 1111

   //&0110 1010   106    0x6a
   //|0110 1111   111    0x6f
   //^0000 0101   5      0x05
   //~1001 0101   149    0x95
   //<1101 0100   212    0xd4
   //>0011 0101   53     0x35
    function  weiTest1() public view returns(bytes1){
       return a & b;
   }
      function  weiTest2() public view returns(bytes1){
       return a | b;
   }
      function  weiTest3() public view returns(bytes1){
       return a ^ b;
   }
      function  weiTest4() public view returns(bytes1){
       return ~a;
   }

      function  weiTest5() public view returns(bytes1){
       return a<<1;
    }
      function  weiTest6() public view returns(bytes1){
       return a >>1;
   }
}

申请入驻

成为作者,让更多人看到您的观点

入驻
合作伙伴