问题描述
bytes32 test1 = sha256(abi.encodePacked("0x7465737400000000000000000000000000000000000000000000000000000001"));
bytes32 test2 = sha256(abi.encodePacked(_sk)); //_sk是函数的传参,bytes32类型
传参输入:
"0x7465737400000000000000000000000000000000000000000000000000000001"
在remix调试后,发现两者并不相等
解决
bytes32 test1 = sha256(abi.encodePacked(hex"7465737400000000000000000000000000000000000000000000000000000001"));
bytes32 test2 = sha256(abi.encodePacked(_sk)); //_sk是函数的传参,bytes32类型
传参输入:
"0x7465737400000000000000000000000000000000000000000000000000000001"
思考
大致觉得造成这个问题的原因在于test1在计算时并没有把0x当作16进制数的标识,而是当作了计算对象的一部分。
test2传参时没有发生这个问题可能在于Solidity有默认的输入处理,而这个处理可以识别0x。
网上找了个例子,方便加深数据类型的理解: