首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将bytes32转换为字节

将bytes32转换为字节
EN

Ethereum用户
提问于 2018-02-26 00:49:55
回答 4查看 9.8K关注 0票数 15

是否有一种简单的方法可以将bytes32转换为bytes

我正在尝试获取在bytes32变量中传递的字符串的长度,但是所有内容都返回32大小,这是有意义的。

但显式转换似乎不起作用:

代码语言:javascript
复制
bytes memory _tmpUsername = bytes(_username);  // _username is of type bytes32 

这会引发以下错误:

代码语言:javascript
复制
Explicit type conversion not allowed from "bytes32" to "bytes storage pointer"
EN

回答 4

Ethereum用户

发布于 2018-08-06 17:35:25

solidity@0.4.22开始,您可以使用abi.encodePacked()来实现它,这将返回bytes。例如;

代码语言:javascript
复制
contract C { 
  function toBytes(bytes32 _data) public pure returns (bytes) {
    return abi.encodePacked(_data);
  }
}
票数 18
EN

Ethereum用户

发布于 2018-02-26 02:32:45

下面是一种将bytes32转换为字节的效率很低的方法(同时将额外的零字节移到右边)。

代码语言:javascript
复制
function bytes32ToBytes(bytes32 data) internal pure returns (bytes) {
    uint i = 0;
    while (i < 32 && uint(data[i]) != 0) {
        ++i;
    }
    bytes memory result = new bytes(i);
    i = 0;
    while (i < 32 && data[i] != 0) {
        result[i] = data[i];
        ++i;
    }
    return result;
}
票数 5
EN

Ethereum用户

发布于 2022-08-21 09:02:56

对稳健性v0.8.4及以上

的回答

您可以使用bytes.concat而不是abi.encodePacked

代码语言:javascript
复制
function toBytes(bytes32 data) public pure returns (bytes memory) {
    return bytes.concat(data);
}

我的理解是,bytes.concat最终将取代abi.encodePacked

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

https://ethereum.stackexchange.com/questions/40920

复制
相关文章

相似问题

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