我必须将 3 个数字编码为同一个整数。
我有这 3 个测量值
uint256 carLength;
uint256 carWidth;
uint256 carDepth;
我想将这 3 个数字编码为同一个整数,并且可以解码。我的问题是我在这么低的水平上经验不足。
我想到这样的功能
function encodeNumbers(uint256 a, uint256 b, uint256 c) public view returns(uint256);
function decodeNumber(uint256) public view returns (uint256, uint256, uint256);
有关如何进行的建议?
如果你把每一个a,b,c
要成为 32 位(4 个字节,或大多数语言中的标准 int),您可以通过一些简单的位移来实现。
pragma solidity 0.4.24;
contract Test {
function encodeNumbers(uint256 a, uint256 b, uint256 c) public view returns(uint256 encoded) {
encoded |= (a << 64);
encoded |= (b << 32);
encoded |= (c);
return encoded;
}
function decodeNumber(uint256 encoded) public view returns (uint256 a, uint256 b, uint256 c) {
a = encoded >> 64;
b = (encoded << 192) >> 224;
c = (encoded << 224) >> 224;
return;
}
}
编码时,我们只需将数字移动到连续的 32 位部分即可。解码时,我们做相反的事情。然而,在 b 和 c 的情况下,我们需要先左移,然后右移,以清除其他数字。
uint256
顾名思义,实际上有 256 位,因此如果您确实需要的话,实际上可以在其中容纳 3 个数字,每个数字最多 85 位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)