Solidity
你如何處理沒有值的十六進制前綴(只有“0x”)?
首先,我正在呼叫函式
foo()
(來自另一個合約),它uint
以bytes
.然後,我
BytesLib.toUint(foo(), 0)
用來檢索uint
.當值應該是
1
, foo 返回0x0000000000000000000000000000000000000000000000000000000000000001
,並且BytesLib.toUint(foo(), 0)
工作正常。當值應該是
2
, foo 返回0x0000000000000000000000000000000000000000000000000000000000000002
,並且BytesLib.toUint(foo(), 0)
工作正常。但是,當值應該是 時
0
, foo 不會返回0x0000000000000000000000000000000000000000000000000000000000000000
。它返回
0x
。並且BytesLib.toUint(foo()), 0)
不起作用。我想實現一些邏輯來檢查
foo()
equals的值0x
。我嘗試了多種方法:
if (foo() == 0x) { //do something else }
if (foo() == "0x") { //do something else }
if (foo() == address(0)) { //do something else }
if (foo() == keccak256(0x)) { //do something else }
但是所有這些都會導致編譯錯誤。
我應該如何處理
0x
?
0x
在技術上是一個空字節數組。在 Solidity 中,您不能直接比較字節(或其他動態類型),因此檢查這一點的簡單方法是檢查字節的長度,例如foo().length == 0
.contract Foo { function foo() public returns (bytes memory) { return bytes(""); } function bar() public returns (bool) { return foo().length == 0; } }
呼叫
foo()
返回一個空字節數組 (0x
),呼叫按預期bar()
返回。true