【问题标题】:how to convert bytes to uint256 in solidity如何在solidity中将字节转换为uint256
【发布时间】:2022-08-06 02:20:29
【问题描述】:

我正在尝试将字节转换为 uint256。这是可靠的代码,

// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

contract Sample {

    function getValue(bytes memory a) external pure returns(uint256 value) {
        assembly {
            value := mload(add(a, 0x20))
        }
    }
}

然后我部署了该代码ganache-cli 我尝试在松露控制台中调用getValue,如下所示,

(await contract.getValue(web3.utils.hexToBytes(\'0xa\'))).toString()

我预计值 10 会返回。但我收到以下错误,

Thrown:
TypeError: param.substring is not a function
    at evalmachine.<anonymous>:1:19
    at evalmachine.<anonymous>:2:49
    at sigintHandlersWrap (vm.js:269:15)
    at Script.runInContext (vm.js:124:14)
    at runScript (/Users/xyz/.nvm/versions/node/v12.14.0/lib/node_modules/truffle/build/webpack:/packages/core/lib/console.js:366:1)
    at Console.interpret (/Users/xyz/.nvm/versions/node/v12.14.0/lib/node_modules/truffle/build/webpack:/packages/core/lib/console.js:381:1)
    at bound (domain.js:419:14)
    at REPLServer.runBound [as eval] (domain.js:432:12)
    at REPLServer.onLine (repl.js:715:10)
    at REPLServer.emit (events.js:210:5)
    at REPLServer.EventEmitter.emit (domain.js:475:20)
    at REPLServer.Interface._onLine (readline.js:316:10)
    at REPLServer.Interface._line (readline.js:693:8)
    at REPLServer.Interface._ttyWrite (readline.js:1019:14) {
  hijackedStack: \'TypeError: param.substring is not a function\\n\' +

帮我解决这个问题。

    标签: solidity web3js truffle


    【解决方案1】:

    您不能将字节转换为 uint256,因为字节是动态大小的字节数组。

    如果您确实需要进行此转换,请使用 bytes32(或任何其他固定大小的字节数组)而不是 bytes,然后通过简单的转换将其转换为 uint256:

    function two(bytes32 inBytes) pure public returns (uint256 outUint) {
          return uint256(inBytes);
    }
    

    【讨论】:

    • 得到同样的错误。我想我没有从松露控制台正确调用。在将 sliceUint 方法设为外部后,我正在从松露控制台调用 sliceUint 这样的 await contract.sliceUint(web3.utils.hexToBytes('0xa'), 0) 方法
    • 我已经更新了对我有用的答案。请让我知道这是否适合您。
    【解决方案2】:

    在solidy 0.8.5中你可以做

    bytes b = ...;
    uint256 num = uint256(bytes32(b));
    

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 1970-01-01
      • 2017-09-05
      • 2021-11-17
      • 1970-01-01
      • 2020-02-04
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多