5 一段sol代码。求解释

function boxURL(uint boxID_) public view returns (string memory) { require(boxMap[boxID_].id != 0, "box not exist"); return string(abi.encodePacked(baseURL, boxID_)); }

微信截图_20220902114809.png

看了一个别人的合约。 这里为啥要用encodePacked呢?时什么作用。我调用合约返回的后面部分是乱码字符。不能直接拼接String吗?

请先 登录 后评论

最佳答案 2022-09-05 09:48

baseURL = "http://192.168.1.1/" boxID_ = 1

abi.encodePacked(baseURL, boxID_) 结果为:0x687474703a2f2f3139322e3136382e312e312f0000000000000000000000000000000000000000000000000000000000000001 0x687474703a2f2f3139322e3136382e312e312f是"http://192.168.1.1/"的编码 0000000000000000000000000000000000000000000000000000000000000001是uint256(1)的编码 这种情况下,是先分别编码再拼接

而 abi.encodePacked(baseURL, Strings.toString(boxID_) 结果为: 0x687474703a2f2f3139322e3136382e312e312f31 ”http://192.168.1.1/1“的编码 这种情况下,是先拼接再编码

请先 登录 后评论

其它 3 个回答

zen
请先 登录 后评论
solidity开发 - solidity开发工程师
请先 登录 后评论
午时已到
请先 登录 后评论
  • 2 关注
  • 0 收藏,2560 浏览
  • 布鲁 提出于 2022-09-02 11:49