Solidity
如何將 msg.data (calldata) 數據類型與整數數據類型 uint256 進行比較?
根據我的問題:
我需要將 msg.data(特別是與 sendTransaction 數據對像一起發送的數字)與我的契約中的 uint256 數據類型進行比較。
這怎麼可能?
逐字節比較。需要轉換。reddit 連結已失效。為什麼需要
msg.data
直接訪問?編輯:將 uint256 從 calldata 字節轉換為 Solidity 中的正確 uint256:https ://gist.github.com/anonymous/a734a5d299ffa7b5a834
編輯:這個網站上的打字系統和發布規則非常奇怪。無論如何,有效。它應該始終返回 true。
的規範
msg.data
是乙太坊合約 ABI。這是 Andreas 提供的答案中的程式碼:
contract ReadConvertUint256Bytes { function equal(uint a) constant returns (bool) { uint x = 0; for (uint i = 0; i < 32; i++) { uint b = uint(msg.data[35 - i]); x += b * 256**i; } return a == x; } }
它從索引為 35 的字節開始讀取,因為前 4 個字節(在索引 0 到 3 處)是方法 ID(參見上面的 ABI),並且乙太坊內部的所有內容都是大端的。