Remix solidity 拆分byte

把bytes 数据拆分

function subbyte(bytes memory self, uint startIndex, uint len) internal pure returns (bytes memory) {
require(startIndex <= self.length && self.length - startIndex >= len);
uint addr = dataPtr(self);
return toBytes(addr + startIndex, len);
}
function dataPtr(bytes memory bts) internal pure returns (uint addr) {
assembly {
addr := add(bts, /BYTES_HEADER_SIZE/32)
}
}
function toBytes(uint addr, uint len) internal pure returns (bytes memory bts) {
bts = new bytes(len);
uint btsptr;
assembly {
btsptr := add(bts, /BYTES_HEADER_SIZE/32)
}
copy(addr, btsptr, len);
}
//拷贝
function copy(uint src, uint dest, uint len) internal pure {
for (; len >= 32; len -= 32) {
assembly {
mstore(dest, mload(src))
}
dest += 32;
src += 32;
}
uint mask = 256 ** (32 - len) - 1;
assembly {
let srcpart := and(mload(src), not(mask))
let destpart := and(mload(dest), mask)
mstore(dest, or(destpart, srcpart))
}
}

字符串截取可以转换为bytes 后截取
bytes memory value = bytes(source);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值