Bytes
solidity 如何在字節數組中找到位置?
我對數組的理解是,數組的初始儲存點用於查找數組的開頭,從該點開始查找數組中的特定項需要元素均勻分佈,作為索引號和大小的乘積一個元素導致所需元素的開頭(所以如果我想要 bytes32
$$ 3 $$,它從儲存點開始向前移動 2 x 32 字節)。此外,由於機器“知道”每個插槽是 32 個字節,它知道在哪裡停止讀取。 但是,在混音中,似乎在創建字節時
$$ $$,它允許每個元素具有任意長度,甚至遠大於 32 字節。此外,readthedocs.io 指出字節更便宜並且“緊密地包裝在呼叫數據中”。這表明每個元素沒有固定的分配空間。 那麼,這種數組是如何工作的,因為它不能以上述方式迭代呢?如果可以遍歷具有任意大小槽的數組,為什麼不是所有數組都具有這種多功能性?
https://programtheblockchain.com/posts/2018/03/09/understanding-ethereum-smart-contract-storage/可能會有所幫助。
具體來說,回想一下這
bytes
是一個動態大小的數組:使用保留槽對固定大小的狀態變數很有效,但它不適用於動態大小的數組和映射,因為無法知道要保留多少個槽。
…
Solidity 使用雜湊函式來統一且可重複地計算動態大小值的位置。
因此,對於 的範例
bytes[3]
,找到就像bytes32[]
. 在該儲存位置,您會找到 的長度,bytes
但實際數據將位於該插槽的散列中。