首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串内存转换为字符串calldata?

将字符串内存转换为字符串calldata?
EN

Stack Overflow用户
提问于 2021-08-21 16:23:08
回答 2查看 563关注 0票数 1

想知道是否有可能在字符串内存和字符串calldata之间进行转换,以便使用string string : end形式的索引,它只支持字符串calldata。这个函数似乎起作用了:

代码语言:javascript
复制
function splice(string calldata source, int startPos, int numchars) public pure returns(string memory) {
        if (startPos > int(length(sourcestring))) return "";
        int start = startPos -1;
        int end = startPos + (numchars -1);
        string memory retval = string(source[uint(start) : uint(end)]);
        return retval;

    }

但是如果我将参数source更改为string memory,就会在string memory retval = string(source([uint(start) : uint(end)])上得到一个错误,因为显然,获取子字符串的形式sourcestring[start : end]适用于calldata字符串,而不是memory字符串,并且没有明显的方法将string memory转换为string calldata

有什么方法可以做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-28 19:24:23

Calldata为只读。您可以将calldata变量解码到内存中,但反之亦然。

不幸的是,数组切片仅针对calldata实现。对于内存和存储,它有点复杂,还没有实现(参见问题#7423)。

在您的例子中,解决方法是一个接一个地复制字符,这实际上是编译器在幕后所做的事情,因为您正在尝试从公共函数返回切片(这将把切片实体化为数组)。

票数 1
EN

Stack Overflow用户

发布于 2021-08-26 01:42:30

可能不是,因为calldata是用于在进行外部事务时提供的数据。与存储相比,其用途截然不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68874808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档