Type-Casting

不允許從“uint256”到“int32”的顯式類型轉換

  • November 24, 2021

我在使用最新的 solc ( 0.8.10) 版本時遇到以下錯誤,這在solc versiona 0.7.*

CompilerError: solc returned the following errors:

TypeError: Explicit type conversion not allowed from "uint256" to "int32".
  --> contracts/contract.sol:248:26:
   |
248 |         int32 core = int32(core);
   |                      ^^^^^^^^^^^

有可能修復它嗎?

根據0.8.0 更新日誌

顯式類型轉換有新的限制。僅當符號、寬度或類型類別(int、地址、bytesNN 等)最多有一次更改時才允許轉換。要執行多項更改,請使用多次轉換。

core是類型uint256,將其轉換為int32您確實是:

  • 改變符號(從無符號到有符號)
  • 改變寬度(從 256 到 32)

重寫您的轉換以適應多次轉換建議:

int32 core = int32(int256(core));

另一方面,int32 core陰影uint256 core幾乎總是一種不好的做法。

請注意顯式類型轉換行為(截斷和符號解釋),確保您提供的值在正確轉換的範圍內。

引用自:https://ethereum.stackexchange.com/questions/114233