型別轉換,是乙個十分重要,常用的手段一、隱式轉換
隱式轉換,就是當乙個運算子能支援不同型別,編譯器會隱式的嘗試將乙個運算元的型別,轉為另乙個運算元的型別,賦值同理。如:條件是:值型別間的互相轉換只要不丟失資訊,語義可通則可轉換。
就是說,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風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把...