1. 程式人生 > >solidity智慧合約[9]-位元組陣列與運算

solidity智慧合約[9]-位元組陣列與運算

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

相關推薦

solidity智慧合約[9]-位元組陣列運算

byte型別 有byte bytes1 bytes2 … bytes32特殊的有byte == bytes1 後面的數字代表佔了多少位元組。1個位元組在記憶體中佔了8位 性質 固定位元組陣列不能修改長度和內容 位元組一般用16進位制來儲存 16進制中的1個數字代表佔了4位。

solidity智慧合約[7]-整型運算

整型變數 整數是現實中處理最多的單位,在solidity中的整數型別有int和uint,int型別可以儲存負數,uint型別只能夠儲存非負數。int型別:int8,int16,int24,int32…int256uint型別:uint8,uint16,uint24,uint32…uint256 後面的

solidity智慧合約[6]-基本型別bool運算

變數 儲存資料的抽象單位,代表記憶體中的一段空間。 型別 同其他的程式語言一樣,solidity中也有許多基本的型別。型別決定了儲存空間的大小和解析的方式。下面列舉出了solidity中基本的型別int、uint、byte、string、bool 基本型別 bool型別 這一小節

solidity智慧合約[36]-連續繼承多重繼承

連續繼承 合約可以被連續的繼承,在下面的合約中,father繼承了grandfather、son繼承了father。那麼son也同樣繼承了grandfather中的狀態變數和方法。 12345678910111213 contract grandfather{ &nbs

Solidify實現一個智慧合約9陣列和string之間的轉換關係)

固定大小位元組陣列之間的轉換 固定大小位元組陣列,我們可以通過bytes1~32來進行宣告,固定大小位元組陣列的長度不可變,內容不可修改。 pragma solidity ^0.4.4; contr

solidity智慧合約[10]-動態位元組陣列

動態位元組陣列的定義 bytes 變數名 = new bytes(大小); 動態位元組陣列的屬性 可以修改大小和長度 動態位元組陣列預設初始化為0 bytes public name = new bytes(2);name的值一開始為0x0000 動態位元組陣列的賦值

solidity智慧合約[8]-位運算字面量

位運算 solidity中,可以對於最底層的位進行操作。由於以太坊中需要消耗gas,因此,為了節約gas、所以對於位的操作會用到比較頻繁。solidity中支援多種型別的位運算操作1、位與 &2、位或 |3、位異或 ^4、位取反 ~5、<<6、>> 數字3、4的二進位制

solidity智慧合約[14]-動態位元組陣列轉換為string

動態位元組陣列轉換為string 動態位元組陣列可以通過string(name)非常直接的轉換為string型別,下面為例子: 1234567891011121314 pragma solidity ^0.4.23;contract dynamicTostring{ &

solidity智慧合約[4]-pureview剖析

pure與view程式碼例子 如下的一段solidity智慧合約中,只要有了pure與view修飾符的函式,那麼呼叫函式就不會消耗gas。而沒有pure與view修飾的函式,如下面的change就會消耗gas。 12345678910111213141516171819

solidity智慧合約[17]-動態長度陣列

動態長度陣列 動態長度陣列可以改變大小和長度 動態長度陣列的定義 uint[] grade=[1,2,3,4,5]; 返回動態長度陣列 123 function getArray() public view returns(uint[]){   &nbs

solidity智慧合約[16]-固定長度陣列

陣列 記憶體中的一片連續區域 定義 12 int[7] math;bytes2[3] bytesTest; 賦值 1 uint[5] public  grade =[1,2,3,4,5];

solidity智慧合約[27]-函式函式過載

函式的一般形式 1 function (<parameter types>) {public|internal|external} [pure|constant|view|payable] [returns (<return types>)]

solidity智慧合約[25]-轉賬的3種方式比較

轉賬的3種方式 123 address.transfer()address.send()address.call.value().gas()() 轉賬transfer 12345678910 function tran

solidity智慧合約[21]-陣列字面量

陣列字面量特點 1、陣列字面量類似與一個常量陣列,不能修改大小和長度,例如[1,2,3]2、陣列字面量滿足最小匹配原則,意味著[1,2,3]儲存的型別為uint8,[256,2,3]儲存的型別為uint16。Solidity會自動的匹配最小的能夠容納的型別3、如果要改變型別的大小,如[1,2,3]中型別

solidity智慧合約[20]-動態二維陣列

動態二維陣列定義 uint[][] public grade = [[60,80],[40,20],[50,50]]; 獲取長度 123456789 function getLength() view public returns(uint){   &nbs

solidity智慧合約[34]-合約繼承可見性

繼承 繼承是面嚮物件語言的重要特徵。繼承是為了模擬現實中的現象,並且可以簡化程式碼的書寫。例如貓與夠都屬於動物。他們都繼承動物的某些特徵。 繼承語法 當前合約繼承父類合約的屬性和方法。 12345678910111213141516171819202122232425262

solidity智慧合約[44]-以太坊測試網路metamask

測試網路 在之前的案例中,大部分都是在remix線上的本地虛擬環境下做的測試。這一小節將在以太坊測試網路中互動合約。除了主網、以太坊有多個測試網路,用於對於智慧合約進行測試。那麼之間的主要區別在於共識演算法以及確認時間。 網路 網路id 共識演算法 確認

solidity智慧合約[42]-memorystorage相互轉換

memory 賦值 狀態變數 下面的例子說明了memory賦值給storage的情況。在test函式中,memory空間的變數s複製給了狀態變數stu。為值的拷貝問題。並且由於這兩個空間互不影響。因此修改變數的值不會影響到另一個變數的值。當呼叫call函式時,返回100,"jonson"。s的修改不會影

solidity智慧合約位元組數最大值及縮減位元組

智慧合約最大位元組數 在Solidity中,EIP 170將contract的最大大小限制為24 KB 。因此,如果智慧合約內容過多,會導致無法進行釋出操作。 減少壓縮位元組數方法 方法及變數命名 在一定程度上,方法或變數的長短會影響位元組數的多少,因此可通過減少方法名或變數名來對內容進行壓縮,但一般情況下效

solidity智慧合約[5]——一筆交易詳解

在之前,我們已經寫好了一個最簡單的helloworld合約,如下: 1234567891011121314151617 pragma solidity ^0.4.23;contract HelloWorld{    string public name