資料位置間相互轉換

2021-09-12 22:28:50 字數 1682 閱讀 4874

storage轉換為storage

當我們把乙個storage型別的變數賦值給另乙個storage時,我們只是修改了它的指標。

pragma solidity ^0.4.0;

contract storageconverttostorage

//預設是storage的

s s;

function convertstorage(s storage s) internal

function call() returns (string)

}在上面的**中,我們將傳入的storage變數,賦值給另乙個臨時的storage型別的tmp時,並修改tmp.a = "test",最後我們發現合約的狀態變數s也被修改了。

memory轉換為storage

因為區域性變數和狀態變數的型別都可能是storage。所以我們要分開來說這兩種情況。

memory賦值給狀態變數

將乙個memory型別的變數賦值給乙個狀態變數時,實際是將記憶體變數拷貝到儲存中。

pragma solidity ^0.4.0;

contract memoryconverttostatevariable

//預設是storage的

s s;

function memorytostate(s memory tmp) internal

function call() returns(string)

}通過上例,我們發現,在memorytostate()中,我們把tmp賦值給s後,再修改tmp值,並不能產生任何變化。賦值時,完成了值拷貝,後續他們不再有任何的關係。

memory賦值給區域性變數

由於在區塊鏈中,storage必須是靜態分配儲存空間的2。區域性變數雖然是乙個storage的,但它僅僅是乙個storage型別的指標。如果進行這樣的賦值,實際會產生乙個錯誤。

pragma solidity ^0.4.0;

contract memorytolocalvar

//預設引數是memory

function memorytolocal(s s) internal

}通過上面的**,我們可以看到這樣的賦值的確不被允許。你可以通過將變數tmp改為memory來完成這樣的賦值。

storage轉為memory

將storage轉為memory,實際是將資料從storage拷貝到memory中。

pragma solidity ^0.4.0;

contract storagetomemory

s s = s("storage", 1);

function storagetomemory(s storage x) internal

function call() returns (string)

}在上面的例子中,我們看到,拷貝後對tmp變數的修改,完全不會影響到原來的storage變數。

memory轉為memory

memory之間是引用傳遞,並不會拷貝資料。我們來看看下面的**。

pragma solidity ^0.4.0;

contract memorytomemory

//預設引數是memory

function memorytomemory(s s) internal

function call() returns (string)

}

進製間的相互轉換

我們的電腦中儲存的是二進位制的值,同樣php可以進行相應的轉換,那麼通過簡單的方法告訴大家,本部落格只是學習時候的筆記 十轉其他 2,8,16 規則 十進位制數,除以目標進製。會得到餘數和商。如果商不為零,繼續使用商除以目標進製,取得餘數和商。直到商為零,此時將所有的餘數,從下倒上連線即可 int ...

進製間的相互轉換

二進位制 是一種計數方法,逢2進1 原碼 是指將最高位作為符號位 0表示正,1表示負 其它數字位代表數值本身的絕對值的數字表示方式。反碼 如果是正數,則表示方法和原碼一樣 如果是負數,符號位不變,其餘各位取反。補碼 如果是正數,則表示方法和原碼一樣 如果是負數,則將原碼數值位取反然後在最低位加1。補...

list,set,map,陣列間的相互轉換

1.list轉set set set new hashset new arraylist set set new hashset new arraylist 2.set轉list list list new arraylist new hashset list list new arraylist ...