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))))); } }}