如何将字符串可靠地转换为 bytes8?

How to convert string to bytes8 in solidity?

函数中获取字符串参数,参数长度小于8。 我想将此参数转换为 bytes8 以保存在数组中。 如何转换?

例如:

pragma solidity 0.8.0;
contract MyContract{
    bytes8 [] Names;
    
    function setName(string memory _name) public{
        Names.push(_name);
    }
}

solidity 0.8.7 中的代码有效

pragma solidity 0.8.7;
contract MyContract{
    bytes8 [] Names;
    
    function setName(string memory _name) public{
        // convert string to bytes first
        // then convert to bytes8
        bytes8 newName=bytes8(bytes(_name));
        Names.push(newName);
    }
}

或者在 solidity 中你可以传递 bytes8 作为参数

function setName(bytes8 _name) public{
        Names.push(_name);
    }

当你在前端调用它时,你将字符串转换为 bytes8,然后将其作为参数传递