Error: invalid bytes32 value (arg="", coderType="bytes32", value="0x6c", version=4.0.37)

pragma solidity ^0.4.20;

contract TestBytes32ToString{
    function bytes32ToString(bytes32 x) public pure returns(uint,uint,uint,string memory){
        bytes memory bytesString = new bytes(32);
        uint charCount = 0;
        for(uint i = 0; i < 32; i++){
            byte char = byte(bytes32(uint(x)*2**(8*i)));
            if(char != 0){
                  bytesString[charCount] = char;
                  charCount++;
            }
        }

        bytes memory bytesStringTrimmed = new bytes(charCount);
        for(i = 0; i < charCount; i++){
            bytesStringTrimmed[i] = bytesString[i];
        }
        return (uint(x),uint(x)*2**(8*0),uint(x)*2**(8*1),string(bytesStringTrimmed));
    }
}

当我在新版本的remix上执行上述代码时,输入参数值“0x6c”,会出现如下错误:

Error encoding arguments: Error: invalid bytes32 value (arg="", coderType="bytes32", value="0x6c", version=4.0.37) 

 

Error: invalid bytes32 value (arg=

但是我在老版本的remix上执行同样的操作是没有问题的:

Error: invalid bytes32 value (arg=

原因:因为新版本remix要求,如果指定了参数的类型为bytes32,那么你就必须在输入参数的值的时候,该值也必须是32 bytes的。

所以在新版本remix中,你要输入“0x6c”,你应该这样输入:

0x6c00000000000000000000000000000000000000000000000000000000000000

 位数不够,用“0”来凑!

这个时候,当我们再次在新版本的remix中执行的时候,就没有问题了。

Error: invalid bytes32 value (arg=

 

参考:

Error encoding arguments: Error: invalid bytes32 value (arg=“”, coderType=“bytes32”, value=“0x6c”, version=4.0.37) >

你可能感兴趣的:(Solidity)