bytes问题

写了一个合约

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

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 0 收藏,2415 浏览
  • ANYFC 提出于 2022-01-09 18:20