Solidity學習 (13)型別轉換

2021-08-28 21:27:04 字數 1541 閱讀 3547

型別轉換,是乙個十分重要,常用的手段

一、隱式轉換

隱式轉換,就是當乙個運算子能支援不同型別,編譯器會隱式的嘗試將乙個運算元的型別,轉為另乙個運算元的型別,賦值同理。

條件是:值型別間的互相轉換只要不丟失資訊,語義可通則可轉換。

就是說,uint8可轉換到uint16、uint32、、、等,但不能反過來

同樣的,無符號整數可以被轉為同樣,或更大的位元組的型別。但需要注意的是,不能反過來轉換。由於address是                20位元組大小,所以它與int160大小是一樣。【因此可用隱式轉換將int160轉換到address】

如:

//轉換例子1

pragma solidity ^0.4.0;

contract int

}//轉換例子2

pragma solidity ^0.4.0;

contract inttoaddress

}

二、顯式轉換

不能隱式轉換是,需要顯式轉換,如有符號整數轉換到無符號整數(8位有符號的負數,轉換到無符號8位,則-1 ===> 255,    -2===>254  以此類推)

即需要新增強制型別轉換符號,來實現轉換

如:

pragma solidity ^0.4.0;

contract explicitconversion

}

三、 使用var的坑

先看下面**,並推算返回結果:

pragma solidity ^0.4.4;

contract test

}return count;

}}

正常看,迴圈到1999就結束了,count應該為2000

實際上,返回的count值為2100

原因是,var變數,為編譯器自動選擇合適的變數,這裡選擇了uint8,那麼i最大255,超過之後又從0開始,因此,僅憑for括號中的條件判斷,並不能跳出迴圈,直到count大於等於2100,才能跳出迴圈。

四、 常用轉換方案

(1)uint轉換到bytes

function tobytes(uint256 x) returns (bytes b) 

}

(2)string轉換到bytes

string可以顯示的轉為bytes。但如果要轉為bytes32,可能只能使用assembly

pragma solidity ^0.4.0;

contract stringtobytes

function stringtobytesver2(string memory source) returns (bytes32 result)

}}

全文參考:

C 學習筆記13 型別轉換

const cast 運算子用於修改型別的 const volatile 屬性。除了 const 或 volatile 屬性之外,目標型別必須與源型別相同。這種型別的轉換主要是用來操作所傳物件的 const 屬性,可以加上 const 屬性,也可以去掉 const 屬性。class a void f...

Swift程式語言學習1 3 型別安全和投機型

swift 是型別安全 type safe 語言。型別安全的語言可以讓你清楚地知道 被處理值型別。假設你需要乙個 string。你絕對不能進去乙個不小心傳球int。因為 swift 它是型別安全,因此,這將是型別檢查的編譯 type checks 並把不匹配的型別標記為錯誤。這能夠讓你在開發的時候盡...

C 筆記9 型別強轉 type cast

c 筆記9 型別強轉 type cast 宣告 本文件由王桂林老師編寫的c 課件,經整理而出。型別轉換有c風格的,當然還有c 風格的。c風格的轉換的格式很簡單 typeexpression 但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把...