bytes问题

ANYFC ANYFC 提出于 2022-01-09 18:20 4393 浏览

写了一个合约

contract Test {

    bytes public s = '0x0014171f090e000e090e090e090e09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09';

   function toUint8Fn(bytes memory _s, uint y) public returns(uint8 value) {
       return uint8(_s[y]);
   }

    function toUint8Fn1(uint y) public returns(uint8) {
       return uint8(s[y]);
   }

   function len(bytes memory x) public view returns(uint) {
       return  x.length;
   }

   function len1() public view returns(uint) {
       return s.length;
   }
}

我的变量s是以 0x开头的bytes变量

通过调用 len方法 传入 s 返回了 57,但是通过 len1方法输出了116,不知道怎么声明 s是一个bytes类型的变量了,还有如何通过web3传bytes参数给合约

最佳答案

2022-01-10 10:01

这个是因为 bytes public s = '0x0014171f090...' 它被当做了一个字符串, 而不是 16进制数据, 而使用web3 传递的时候,当做了 16进制数据。

在 solidity 代码里, 你应该 这样声明一个 16进制数据:

bytes public s = hex"001417....";

参考 solidity 文档:https://learnblockchain.cn/docs/solidity/types.html#index-11

Tiny熊

擅长:智能合约,以太坊 · 采纳率 33% · 回答于 2022-01-10 09:18

其它 0 个回答

写回答

你需要登录后才可以回答问题,登录