1. uint256 转 bytes
contract uintTobytes {
// 比 toBytes1 少 15% de gas
function toBytes0(uint _num) public returns (bytes memory _ret) {
assembly {
_ret := mload(0x10) //_ret = mem[0x10~0x30] =0 //出盏
mstore(_ret, 0x20) // mem[0x0~0x20]= 0x20
let pos := add(_ret, 0x20) // pos = 0x20
mstore(pos , _num) // mem[0x20~0x40] = _num
}
}
function toBytes1(uint256 x) public returns (bytes memory b) {
b = new bytes(32);
assembly { mstore(add(b, 32), x) }
}
function toBytes2(uint256 x) public returns (bytes memory c) {
bytes32 b = bytes32(x);
c = new bytes(32);
for (uint i=0; i < 32; i++) {
c[i] = b[i];
}
}
function toBytes3(uint256 x) public returns (bytes memory b) {
b = new bytes(32);
for (uint i = 0; i < 32; i++) {
b[i] = byte(uint8(x / (2**(8*(31 - i)))));
}
}
}